регулярное выражение для номера телефона в php - PullRequest
1 голос
/ 11 июня 2011

Я использую проверку формы Zend для номера телефона. и я хочу, чтобы пользователь вводил номер телефона в следующих форматах:

"+ 91-151-1234567", "01234567891", "+912345678901"

поэтому я использую это регулярное выражение:

"^(?:\+?([0-9]{3})\)?[-. ]?\(?([0-9]{3})\)?[-. ]?([0-9]{10})[-. ]$"

но это не работает. это генерирует ошибку:

Неустранимая ошибка: необработанное исключение 'Zend_Validate_Exception' с сообщением Шаблон сопоставления внутренних ошибок «^: [- (+ ([0-9] {3})??). ] (([0-9] {3})?) [? -. ] ([0-9] {10}) [? -. ] $ 'против значения' + 91-151-3297154 '' в /var/www/html/allindiazend/library/Zend/Validate/Regex.php:117 Трассировка стека: # 0 /var/www/html/allindiazend/library/Zend/Validate.php(98): Zend_Validate_Regex-> IsValid ( '+ 91-151-3297154')

1 /var/www/html/allindiazend/library/Zend/Validate.php(98):

Zend_Validate-> IsValid ( '+ 91-151-3297154')

2 /var/www/html/allindiazend/library/Zend/Filter/Input.php(932):

Zend_Validate-> IsValid ( '+ 91-151-3297154')

3 /var/www/html/allindiazend/library/Zend/Filter/Input.php(800):

Zend_Filter_Input -> _ validateRule (Array)

4 /var/www/html/allindiazend/library/Zend/Filter/Input.php(688):

Zend_Filter_Input -> _ validate () # 5 /var/www/html/allindiazend/library/Zend/Filter/Input.php(430): Zend_Filter_Input -> _ process () # 6 /var/www/html/allindiazend/application/controllers/StaticController.php(148): Zend_Filter_Input-> isValid () # 7 / var / www / html / allindi в /var/www/html/allindiazend/library/Zend/Validate/Regex.php по линии 117

Может ли кто-нибудь помочь мне сделать это.

спасибо заранее.

Ответы [ 4 ]

4 голосов
/ 11 июня 2011

Это выражение будет соответствовать всем вашим 3 примерам:

\+?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})
3 голосов
/ 11 июня 2011

Не уверен, что ваша часть не совпадает, но я только что протестировал написанную мной альтернативную версию, и она работает для всех ваших примеров:

^(\+\d{12}|\d{11}|\+\d{2}-\d{3}-\d{7})$
2 голосов
/ 11 июня 2011

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

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

0 голосов
/ 03 октября 2013

Должен ли я создать скрипт php, который извлекает все телефонные номера, перечисленные на странице ...

Номера могут быть записаны в различных форматах, таких как: 0039024343333 +39024343333 (0041) 91 999 11 11 +41 (0) 91 999 11 11 0919991111 091 99 911 11 +1 123 344 2244 5 123-344-2244-5 и т. Д.

Я пробовал этот скрипт, но он работает только частично:

GetPhoneNumber function ($ txt) {
$ regexp = '/ ([+ \ \ s]) {1,3} ([0-9 \ \ s] {2,5}) -? ([0-9 \ \ s] {2,5}) -? ([0-9 \ \ s] {2,20}) / ';

preg_match_all ($ regexp, $ txt, $ m);


return isset ($ m [0])? $ m [0]: array ();
}

$ fulltxt = file_get_contents ('http://wiki.wikimedia.it/wiki/Contatti');
$ phonenumber = GetPhoneNumber ($ fulltxt);
print_r ($ phonenumber);
...