PHP正则表达式(电话号码)

时间:2011-10-24 12:02:01

标签: php javascript regex

我在使用电话号码的正则表达式时遇到了一些麻烦。我正在尝试为欧洲电话号码创建一个尽可能广泛的正则表达式。电话号码可以以+或两个前导0开头,然后是0到40之间的数字。但是,这不是必需的,因此第一部分也可以忽略。在那之后,它应该都是数字,分成至少两对,在组之间有一个空格或 - 。

我放在一起的正则表达式可以在下面找到。

/((\+|00)+[0-4]+[0-9]+)?([ -]?[0-9]{2,15}){1,5}/

这应符合以下结构

0031 34-56-78
0032123456789
0033 123 456 789
0034-123-456-789

+35 34-56-78
+36123456789
+37 123 456 789
+38-123-456-789
...

它根据我的javascript匹配的内容

+32 a54b 67-0:

所以我一定是在某个地方弄错了,但我真的看不到它。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:10)

问题是你没有使用锚点^ $来定义字符串的开头和结尾,因此会在字符串中的任何地方找到匹配项。

/^((\+|00)+[0-4]+[0-9]+)?([ -]?[0-9]{2,15}){1,5}$/

添加锚点就可以了。有关这些元字符的更多信息,请参见here

答案 1 :(得分:1)

^放在RegExp的开头,最后放入$

答案 2 :(得分:1)

试试这个,也许可以帮到你。

if (ereg("^((\([0-9]{3}\) ?)|([0-9]{3}-))?[0-9]{3}-[0-9]{4}$",$var)) 
{
    $valid = true; 
}