Найти номера телефонов в строке - PullRequest
2 голосов
/ 12 августа 2011

В PHP я ищу номера телефонов в определенном тексте.Я использую explode(), чтобы разделить текст на части, используя код города, который я ищу, в качестве разделителя.Проблема заключается в том, что номера телефонов, которые включают те же самые номера , что и код города, возвращаются не очень хорошо.

Например:

"foofoo 010-1234567 barbar" разбивается на "foofoo " и"-1234567 barbar"

, но

"foofoo 010-1230107 barbar" распадается на "foofoo ", "-123" и "7 barbar"!

. Я могу использовать первый, чтобы восстановить фоненуммер сареакод, но второй идет не так, как надо ...

Я думаю, мне нужно регулярное выражение, чтобы разбить текст с помощью какого-то механизма, чтобы не разбивать на короткие строки вместоexplode(), но я не знаю, как это сделать.

Какие-нибудь идеи или лучший способ поиска телефонных номеров в тексте?

ОБНОВЛЕНИЕ: Формат НЕ соответствует, поэтому поиск дефиса не является решением.Некоторые телефонные номера имеют пробелы между кодом города и номером, у некоторых есть зацепки, у некоторых ничего нет и т. Д. Голландские телефонные номера имеют ареакод из 2,3 или 4 номеров и обычно состоят из 10 номеров.

Ответы [ 3 ]

7 голосов
/ 12 августа 2011

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

  • 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);
2 голосов
/ 12 августа 2011

Вы можете использовать регулярное выражение для сопоставления телефонных номеров. Существует множество способов обшарить этого конкретного кота (и, вероятно, много идентичных вопросов здесь, в 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
)
0 голосов
/ 12 августа 2011

Если вы удалите все нечисловые символы, у вас останется только номер телефона. Затем вы можете взять эту строку и проанализировать ее в ###-###-####, если хотите.

$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

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

...