preg_match如何否定电话号码中的前一个零?

时间:2011-06-27 14:50:17

标签: php regex

我只是学习正则表达式,所以我可以在这个主题上使用一些关于电话号码验证的帮助。

我的手机输入分为一个选择列表,国家/地区代码前缀为+号。如果用户忘记删除电话号码中的前一个零,则不符合E.164国际标准(然而,有少数国家是此规则的例外,即意大利,挪威等)。但大多数人需要省略有效国际电话号码的零。

在我有限的研究中,我意识到全世界的电话号码格式差异很大。这意味着验证需要松散而不是严格,并允许将破折号,空格,括号,点和正斜杠的任意组合作为数字之间的分隔符。为了符合E.164标准,分隔符将被空字符串替换,以提供如下示例结果:+44755222333

这是我迄今为止尝试验证任何数字的尝试。

preg_match('/^(?:[0-9][.\-\(\)\s]*)/$', $phonenumber);

如何组合正则表达式来否定前面的零,即在字符串0或00的情况下返回错误匹配,以及验证任何可能的电话号码符号的灵活性?

真诚地,为什么

P.S只是为了检查。 “无零”规则是否也适用于NANP号码?我问这个是因为我认为这里的大多数人都熟悉那个电话号码系统。

2 个答案:

答案 0 :(得分:2)

您可以使用preg_replace去除前导零:

$phonenumber = preg_replace('/^0+/','',$phonenumber);

这将从字符串的前面删除一个或多个零。 (如果您只想删除一个零,则删除加号)。

希望有所帮助。

答案 1 :(得分:0)

这个怎么样:

$number = '044567565';
preg_match('/^0{0,2}(([0-9]*[.\-\(\)\s]*)*)/', $number, $match);
print_r($match);

结果:

array(
    [0] => 044567565
    [1] => 44567565
    [2] => 
)