#php #regex #zend-framework #string #zend-validate
#php #регулярное выражение #zend-framework #строка #zend-проверка
Вопрос:
Я использую проверку формы 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
Может ли кто-нибудь помочь мне в этом.
заранее благодарю вас.
Комментарии:
1. генерируется ошибка:- Неустранимая ошибка: неперехваченное исключение ‘Zend_Validate_Exception’ с сообщением ‘Внутренняя ошибка сопоставления шаблона ‘^(?: ?([0-9]{3}))?[-. ]?(?([0-9]{3}))?[-. ]?([0-9]{10})[-. ]$’ против значения ‘ 91-151-3297154″
2. Вы хотите использовать другие региональные форматы? Такое как » 44 (12345) 12345678″, » 353 12 1234567″, » 61 1 12345678″, » 33.1.23.45.67.89″, …?
3. Этого так сложно достичь. Вам не только приходится обрабатывать пробелы и т.д., Но некоторые люди добавляют «ext 343» в конце и т.д. Если у вас есть определенный формат, это нормально, но если вы просите людей вводить номер телефона, вам придется несладко, если вы просто не оставите его в виде текста.
Ответ №1:
Это выражение будет соответствовать всем вашим 3 примерам:
?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})
Комментарии:
1. preg_match(): в строке 3 не найден конечный разделитель ‘ ‘. Я получаю эту ошибку с помощью preg_match(‘ ?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})’, $ телефон)
Ответ №2:
Не уверен, какая часть вашего не соответствует, но я только что протестировал альтернативную версию, которую я написал, и, похоже, она работает для всех ваших примеров:
^( d{12}|d{11}| d{2}-d{3}-d{7})$
Ответ №3:
Вместо того, чтобы проводить тщательную проверку всех разрешенных форматов, я бы разрешил любой формат. Вы можете преобразовать его в единый формат (без тире и круглых скобок), выполнить все необходимые проверки и сохранить каждый номер телефона таким же образом, чтобы его можно было легко получить.
Если вы решите свою проблему таким образом, ваш интерфейс станет более удобным для пользователя, дополнительные проверки будут проще добавлены, а сохраненные вами телефонные номера будут лучше использоваться для других приложений.
Ответ №4:
Должен ли я создать 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);