Поиск номеров телефонов в строке

В 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 номеров.

Чтобы найти номера телефонов, например:

  • 010-1234010
  • 010 1234010
  • 010 123 4010
  • 0101234010
  • 010-010-0100

Попробуй это:

 $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 

Не уверен, что это то, что вы ищете или нет.