2013-05-10 77 views
1

我想为我的代码写一个正则表达式,正则表达式用于验证电话号码格式,前两位数字应该是01,04,05,06,07,08, 09后面跟着一个短划线( - ),后面跟着6位数字。正则表达式PHP没有正确验证

我使用了以下正则表达式:0[1456789]{1}-[0-9]{6}。 我用下面的网站,以确保我的正则表达式工作正常:RegExr,我在下面的01-123456

测试它。然而,当我运行我的代码,我的函数返回如果该号码是无效的,这是不。

这里是我的代码:

function validHomePhone() { 
    global $home_phone; 

    $home_phone_regex = "0[1456789]{1}-[0-9]{6}"; 
    return preg_match($home_phone_regex, $home_phone); 
} 

为什么会出现这样的结果?

+6

你不需要在你的正则表达式分隔符? – andrewsi 2013-05-10 13:35:52

+2

我也想推荐一个正则表达式'/ 0 [14-9] - \ d {6} /'的简化版本。 – Joe 2013-05-10 13:37:28

回答

7

您需要附上在delimiter表达,就像这样:

/0[1456789]{1}-[0-9]{6}/ 

您还应该添加的开始和结束的字符串锚,否则你的表现将匹配任何包含一个有效的数字:

/^0[1456789]{1}-[0-9]{6}$/ 

虽然我们“在它重新的{1}量词是多余的:

/^0[1456789]-[0-9]{6}$/ 

最后,[1456789]可以简化为[14-9]。就我个人而言,我不会这样做,因为恕我直言,它减少了可读性而没有真正的收益,但它可能在其他地方有用。

+3

另外你的函数应该使用一个参数$ home_phone,而不是全局的$ home_phone函数validHomePhone($ home_phone)并擦除全局行。 – beiller 2013-05-10 13:38:35

+0

我刚开始和结束时只是用'/'试过,但没有用'^'和'$'尝试,我虽然没有它们,但不需要它们 感谢Jon – 2013-05-10 13:38:38

+1

@ aizen92:还要注意上面的beiller的评论,他的200%是正确的。 – Jon 2013-05-10 13:40:12