В PHP я ищу номера телефонов в определенном тексте. Я использую explode()
для разделения текста в разных частях, используя код города города, который я ищу в качестве разделителя. Проблема в том, что номера телефонов, которые содержат те же номера, что и код области, не возвращаются хорошо.
Например:
"foofoo 010-1234567 barbar"
разбивается на "foofoo "
и "-1234567 barbar"
но
"foofoo 010-1230107 barbar"
разбивается на "foofoo "
, "-123"
и "7 barbar"
!
Я могу использовать первый, чтобы восстановить phonenummer с isacode, но второй идет не так, конечно …
Я думаю, мне нужно регулярное выражение, чтобы разделить текст с каким-то механизмом, чтобы не разделить на короткие строки, а не explode()
, но я не знаю, как это сделать.
Любые идеи или лучший способ поиска буквенных знаков в тексте?
ОБНОВЛЕНИЕ: формат НЕ согласован, поэтому поиск дефиса не является решением. У некоторых телефонных номеров есть пробелы между кодом города и номером, у некоторых есть крючки, у некоторых нет ничего и т. Д. На голландских phonenumbers есть база данных из 2,3 или 4 номеров и обычно составляет 10 номеров.
Чтобы найти номера телефонов, например:
Попробуй это:
$text = 'foofoo 010-1234010 barbar 010 1234010 foofoo '; $text .= ' 010 123 4010 barbar 0101234010 foofoo 010-010-0100'; $matches = array(); // returns all results in array $matches preg_match_all('/[0-9]{3}[\-][0-9]{6}|[0-9]{3}[\s][0-9]{6}|[0-9]{3}[\s][0-9]{3}[\s][0-9]{4}|[0-9]{9}|[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches); $matches = $matches[0]; var_dump($matches);
Вы можете использовать регулярное выражение для соответствия номерам телефонов. Существует много способов утилит этого конкретного кота (и, вероятно, много одинаковых вопросов здесь, на SO), супер-базовый пример может выглядеть следующим образом.
$subject = "foofoo 010-1230107 barbar 010-1234567"; preg_match_all('/\b010-\d+/', $subject, $matches); $numbers = $matches[0]; print_r($numbers);
Вышеизложенное выводит содержимое массива $numbers
.
Array ( [0] => 010-1230107 [1] => 010-1234567 )
Если вы удалите все ненулевые символы, вы останетесь только с номером телефона. Затем вы можете взять эту строку и проанализировать ее на ###-###-####
если хотите.
$phone = preg_replace('/\D/', '', 'Some test with 123-456-7890 that phone number'); //$phone is now 1234567890 echo substr($phone, 0, 3);//123 echo subsr($phone, 3, 3);//456 echo substr($phone, 6);//7890
Не уверен, что это то, что вы ищете или нет.