简体   繁体   English

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

[英]regular expression for phone number in php

I am using zend form validation for a phone number.我正在对电话号码使用 zend 表单验证。 and I want, user should enter phone number in these formats:我想,用户应该以这些格式输入电话号码:

"+91-151-1234567", "01234567891", "+912345678901" “+91-151-1234567”、“01234567891”、“+912345678901”

so i am using this regular expression:所以我使用这个正则表达式:

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

but it is not working.但它不工作。 it is generating error:它正在产生错误:

Fatal error: Uncaught exception 'Zend_Validate_Exception' with message 'Internal error matching pattern '^(?:+?([0-9]{3}))?[-.致命错误:未捕获的异常 'Zend_Validate_Exception' 带有消息 '内部错误匹配模式 '^(?:+?([0-9]{3}))?[-. ]?(?([0-9]{3}))?[-. ]?(?([0-9]{3}))?[-. ]?([0-9]{10})[-. ]?([0-9]{10})[-. ]$' against value '+91-151-3297154'' in /var/www/html/allindiazend/library/Zend/Validate/Regex.php:117 Stack trace: #0 /var/www/html/allindiazend/library/Zend/Validate.php(98): Zend_Validate_Regex->isValid('+91-151-3297154') ]$' 对 /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): 1 /var/www/html/allindiazend/library/Zend/Validate.php(98):

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

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

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

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

Zend_Filter_Input->_validateRule(Array) Zend_Filter_Input->_validateRule(Array)

4 /var/www/html/allindiazend/library/Zend/Filter/Input.php(688): 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 on line 117 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 行

Can any one help me for making this.谁能帮我做这个。

thank you in advance.先感谢您。

This expression will match all your 3 examples:此表达式将匹配您的所有 3 个示例:

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

Not sure what part of yours isn't matching, but I just tested an alternative version I wrote and it seems to work for all your examples:不确定您的哪一部分不匹配,但我刚刚测试了我编写的替代版本,它似乎适用于您的所有示例:

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

Instead of doing extensive checking of all allowed formats, I would allow any format.我不会对所有允许的格式进行广泛的检查,而是允许任何格式。 You can convert it to a single format (without dashes and parentheses) do all the checking you want, and store each phone number in the same way, so that you can easily retrieve it as well.您可以将其转换为单一格式(不带破折号和括号)进行所有您想要的检查,并以相同的方式存储每个电话号码,以便您也可以轻松检索它。

If you solve your problem this way, your interface is more user friendly, additional checks are more easily added and your stored phone numbers are better usable for other applications.如果您以这种方式解决问题,您的界面会更加用户友好,更容易添加额外的检查,并且您存储的电话号码可以更好地用于其他应用程序。

Should I create a php script that extracts all the phone numbers listed on a page...我是否应该创建一个 php 脚本来提取页面上列出的所有电话号码...

The numbers may be written in different formats such as: 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 etc..这些数字可以写成不同的格式,例如: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 等。 .

I have tried this script but it works only in part:我已经尝试过这个脚本,但它只能部分工作:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM