@evgen9586
Backend-dev. Лублу Enterprise и не люблю понты)

Как правило разделить такую строку?

В чём суть. Может приходить строка как в таком виде
https://site.ru/#top 7 (499) 999-99-99;
так и в таком
7 (499) 999-99-99; https://site.ru/#top

Суть в том , чтобы разделить строку на сайт и телефон. Сайт начинаться может с http/www либо //.
Из-за того что сайт и телефон могут меняться местами нужно писать что-то универсальное. Т е как я понимаю Найти строку которая начинается с www/http или двух косых вырезать её до первого пробела ИЛИ конца строки. И потом уже из начальной строки удалить сайт как подстроку/

Думал воспользоваться stristr, но сайт с телефоном могут меняться местами, а так была бы задача в 5 секунд решения

Как можно победить эту задачу более адекватным путём? Или пользоваться путём описанным выше?
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
<?php
$strings = [
    'https://site.ru/#top 7 (499) 999-99-99;',
    '7 (499) 999-99-99; https://site.ru/#top',
];

foreach($strings as $str)
{
    print_r(extract_data($str));
}

function extract_data($str)
{
    preg_match('!(https?://[^\s]+)!si', $str, $out);
    $url = $out[1] ?? '';
    
    $str = str_replace($url, '', $str);
    
    $phone = trim(preg_replace('![^0-9\(\)\-\ ]+!si', '', $str));
    
    return [
        'url' => $url,
        'phone' => $phone
    ];
}


Array
(
    [url] => https://site.ru/#top
    [phone] => 7 (499) 999-99-99
)
Array
(
    [url] => https://site.ru/#top
    [phone] => 7 (499) 999-99-99
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы