2012-04-23 107 views
4

我想写一个匹配的方法在PHP中,允许我匹配电话号码。PHP - RegEx匹配电话号码有或没有国家代码

我的情况是我想要构建一个应用程序,它将从Android设备中提取手机联系人号码,在后端,它将匹配手机通讯录与当前应用程序用户,如果匹配,则添加这些用户作为朋友,类似于whatsapp在将手机联系人与在其设备中拥有WhatsApp应用的用户进行匹配时的做法。

我现在遇到的问题是我如何编写一个RegEx,可以匹配电话号码是否带有国家代码或前导零。

在应用程序中,我要求的用户的国家和电话号码,例如我的一个朋友进入这些值: 国家:约旦(+962) 电话号码:799633999 这在后端将被保存as +962799633999

如果我们假设我正在讲故事,我的朋友号码为0799633999,那么我可以使用的regEx将匹配0799633999和+96279963999?

回答

4

你的正则表达式是#(\+\d+|0)(\d{9})$#

+0

但国家代码并不总是一个3个位数,我试图找到需要一个通用的正则表达式考虑到任何国家代码 – 2012-04-23 14:19:49

+0

看起来修改答案 – 2012-04-24 04:40:39

+0

很酷,非常感谢! – 2012-04-25 15:11:44

2

你不与正则表达式做到这一点。 截断您的前导零和国家/地区代码,并进行常规字符串比较。

如果联系人可以来自不同的国家,然后添加您正在寻找的朋友的国家代码。

+0

我希望REGEX能够截断我,并通过排除前导零和国家代码来进行匹配。只是,我无法猜测手机通讯录中的号码是否带有前导零/国家/地区代码,因此正则表达式将确保从两个字符串中排除该号码并进行匹配,否? – 2012-04-23 14:18:12

0

参考this链接,您可以使用正则表达式:

^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$ 

PHP代码:

$re = '/^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$/'; 
$str = '+2529371208646'; 

preg_match_all($re, $str, $matches); 

print_r($matches); 
相关问题