1

我正在对电话号码使用 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})[-. ]$' 与 /var/www/html/allindiazend/library/Zend/Validate/Regex.php:117 中的值 '+91-151-3297154'' 对比 堆栈跟踪:#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 回答 4

5

此表达式将匹配您的所有 3 个示例:

\+?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})
于 2011-06-11T06:35:07.650 回答
4

不确定您的哪一部分不匹配,但我刚刚测试了我编写的替代版本,它似乎适用于您的所有示例:

^(\+\d{12}|\d{11}|\+\d{2}-\d{3}-\d{7})$
于 2011-06-11T06:36:27.723 回答
2

我不会对所有允许的格式进行广泛的检查,而是允许任何格式。您可以将其转换为单一格式(不带破折号和括号)进行所有您想要的检查,并以相同的方式存储每个电话号码,以便您也可以轻松检索它。

如果您以这种方式解决问题,您的界面会更加用户友好,更容易添加额外的检查,并且您存储的电话号码可以更好地用于其他应用程序。

于 2011-06-11T06:50:18.750 回答
0

我是否应该创建一个 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-34-2 等。 .

我已经尝试过这个脚本,但它只能部分工作:

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);
于 2013-10-03T10:04:06.030 回答