在php或zend中,国际电话号码验证的正则表达式是什么?

5

我有一个Zend表单,其中有一个电话号码字段,需要进行验证。

我决定使用正则表达式进行验证。我在谷歌上搜索了一下,但是结果并不起作用。

请问有人能够提供给我正则表达式吗? 这是我的代码:

 $phone = new Zend_Form_Element_Text('phone');
            $phone->setRequired(true);
            $phone->setLabel('Phone :')
            ->addFilter('StripTags')
            ->addValidator('NotEmpty', false, array('messages'=>'phone cannot be empty'))
            ->addFilter('StringTrim')
            ->addValidator('regex', false, array('/^[0-9 ]+$/','messages'=>'not a valid phone number'))
            ->addValidator('StringLength', false, array(5, 25, 'messages'=>'phone must be 5-25 character'))

提前感谢您


@Gabber,我搜索了很多但都不起作用。这就是为什么我发布了这个问题。我犯的错误是没有在表达式的开头和结尾使用“/”。这是我从user1559230给出的答案中学到的。感谢您的评论Gabber。下次我一定会记住的。 - ehp
谢谢您的礼貌回复 :) - Gabber
3个回答

3
/^((\+|00)\d{1,3})?\d+$/

尝试上述表达式,希望这能帮到你。


\d{1,3} 代表什么意思呢?我知道它匹配 1 到 3 位数字,但是对于任何至少有 3 位数字(在可选的 00 后面),它都会匹配所有三个数字。例如,给定 +18005551212\d{1,3} 匹配的是 180,这是没有意义的。而且你的正则表达式拒绝带有空格和连字符的号码;这是你的意图吗? - Keith Thompson

2
请注意,电话号码是存在的最难的日常数据验证之一(与电子邮件一样,它可以包含“+”或域中的端口号)。您应该了解使用“某些”正则表达式的影响。可能会有一些用户(甚至整个国家)无法匹配某些正则表达式。或者用户可以输入数字,即使它们与正则表达式匹配,也不是电话号码。

http://en.wikipedia.org/wiki/E.164

关于Zend_Phone实现E.164的问题已经出现,但最终并未实现。被接受的解决方案(/^((\+|00)\d{1,3})?\d+$/)甚至会将下一个字符串匹配为有效电话号码:
+0000000000000000000000000000000000000000000000 

世界很小 - tobik

0
你可以试试这个,对我来说有效。
/^(\+[\d|\-]*)\s([0-9]+)$/

或者扩展版本

/^(\+[011|999|998|997|996|995|994|993|992|991|990|979|978|977|976|975|974|973|972|971|970|969|968|967|966|965|964|963|962|961|960|899|898|897|896|895|894|893|892|891|890|889|888|887|886|885|884|883|882|881|880|879|878|877|876|875|874|873|872|871|870|859|858|857|856|855|854|853|852|851|850|839|838|837|836|835|834|833|832|831|830|809|808|807|806|805|804|803|802|801|800|699|698|697|696|695|694|693|692|691|690|689|688|687|686|685|684|683|682|681|680|679|678|677|676|675|674|673|672|671|670|599|598|597|596|595|594|593|592|591|590|509|508|507|506|505|504|503|502|501|500|429|428|427|426|425|424|423|422|421|420|389|388|387|386|385|384|383|382|381|380|379|378|377|376|375|374|373|372|371|370|359|358|357|356|355|354|353|352|351|350|299|298|297|296|295|294|293|292|291|290|289|288|287|286|285|284|283|282|281|280|269|268|267|266|265|264|263|262|261|260|259|258|257|256|255|254|253|252|251|250|249|248|247|246|245|244|243|242|241|240|239|238|237|236|235|234|233|232|231|230|229|228|227|226|225|224|223|222|221|220|219|218|217|216|215|214|213|212|211|210|98|95|94|93|92|91|90|86|84|82|81|66|65|64|63|62|61|60|58|57|56|55|54|53|52|51|49|48|47|46|45|44|43|41|40|39|36|34|33|32|31|30|27|20|7|1|\-]*)\s([0-9]+)/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接