регулярное выражение для номера телефона в php

Я использую проверку формы 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(Массив)

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

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

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


person Chirayu    schedule 11.06.2011    source источник
comment
он генерирует ошибку: - Неустранимая ошибка: необработанное исключение «Zend_Validate_Exception» с сообщением «Внутренний шаблон сопоставления ошибок» ^(?:\+?([0-9]{3}))?[-. ]?(?([0-9]{3}))?[-. ]?([0-9]{10})[-. ]$' вместо значения '+91-151-3297154''   -  person Chirayu    schedule 11.06.2011
comment
Хотите поймать другие региональные форматы? Например, +44 (12345) 12345678, +353 12 1234567, +61 1 12345678, +33.1.23.45.67.89, ...?   -  person Johnsyweb    schedule 11.06.2011
comment
Это такая сложная вещь для достижения. Вам нужно не только обрабатывать пробелы и т. д., но некоторые люди добавляют в конце ext 343 и т. д. Если у вас есть определенный формат, это нормально, но если вы просите людей ввести номер телефона, вы попадаете в мир боль, если вы просто не оставите это как текст.   -  person Cameron    schedule 23.03.2018


Ответы (4)


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

\+?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})
person Alex Aza    schedule 11.06.2011
comment
preg_match(): в строке 3 не найден конечный разделитель '+'. Я получаю эту ошибку с preg_match('+?([0-9]{2})-?([0-9]{3})-?( [0-9]{6,7})', $телефон) - person Sankha Kulathantille; 04.07.2019

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

^(\+\d{12}|\d{11}|\+\d{2}-\d{3}-\d{7})$
person Alexander Tsepkov    schedule 11.06.2011

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

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

person GolezTrol    schedule 11.06.2011

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

Номера могут быть записаны в различных форматах, таких как: 0039024343333 +39024343333 (0041) 91 999 11 11 +41 (0) 91 999 11 11 0919991111 091 99 911 11 +1 123 344 2244 5 122-444-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);
person user2842097    schedule 03.10.2013