php中电话号码的正则表达式

时间:2011-06-11 06:19:48

标签: php regex zend-framework string zend-validate

我正在使用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 in   /var/www/html/allindiazend/library/Zend/Validate/Regex.php   在第117行

任何人都可以帮助我做到这一点。

提前谢谢你。

4 个答案:

答案 0 :(得分:4)

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

\+?([0-9]{2})-?([0-9]{3})-?([0-9]{6,7})

答案 1 :(得分:3)

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

^(\+\d{12}|\d{11}|\+\d{2}-\d{3}-\d{7})$

答案 2 :(得分:2)

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

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

答案 3 :(得分: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-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);