сопоставить номера телефонов из текста - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть регулярное выражение в php, которое соответствует довольно хорошим телефонным номерам из некоторого текста.

([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])    

хороших совпадений: 041 797 - 991 или +386 2 80 55 291 или +386 (0)41 718 827

плохое совпадение: 000/000/13 (если перед ним три нуля, не совпадает, может быть?)

Как я могу удалить этот плохой матч?

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Почему бы просто не выполнить цикл для всех чисел, а затем проверить это (удалить все посторонние символы):

preg_match_all("/\d/",$phone_number,$array);
// $array[0] will be an array of each digit

Затем вы можете проверить на основе длины (например, решить, имеет ли он код страныили нет и проверьте его по сохраненному массиву или таблице).

1 голос
/ 04 ноября 2011

Для этого можно использовать отрицательное утверждение (?!...).

Подобный пример был также где-то в многочисленных существующих вопросах по php regex match phone number , просто посмотрите вокруг.

Или вы можете просто просмотреть результаты матчей и отфильтровать их по новым критериям.

0 голосов
/ 03 декабря 2011

Это исправляет ваше регулярное выражение:

(?!(?:0[ /-]*){2,})([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])

Поскольку вы уже работали над своим выражением, чтобы разрешить определенным символам, которые вы видите в своем наборе данных, вместо того, чтобы писать новый с нуля, я работал с вашим.

Добавленная фраза в начале - отрицательный взгляд.

(?!(?:0[ /-]*){2,})

Перевод: Забегая вперед в начале матча, мы не хотим видеть {ноль (необязательно сопровождаемый такими символами, как пробел, косая черта или дефис)} два или более раз.

Если с двумя нулями все в порядке, замените 2 на три.Также измените символы внутри [/ -] в зависимости от того, как выглядят ваши данные.

Я проверил регулярное выражение по вашим образцам данных.Это работает.

...