正则表达式PHP无法正确验证

hak*_*ata 1 php regex validation preg-match

我正在尝试为我的代码编写正则表达式,正则表达式用于验证电话号码格式,前两位数字应为01,04,05,06,07,08,09,后跟短划线( - )和仅后跟6位数字.

我使用了以下正则表达式: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);
}
Run Code Online (Sandbox Code Playgroud)

为什么我会得到这样的结果?

Jon*_*Jon 7

您需要将表达式括在分隔符中,如下所示:

/0[1456789]{1}-[0-9]{6}/
Run Code Online (Sandbox Code Playgroud)

您还应该添加字符串的开头和结尾锚点,否则您的表达式将匹配包含有效数字的任何内容:

/^0[1456789]{1}-[0-9]{6}$/
Run Code Online (Sandbox Code Playgroud)

虽然我们在这里,{1}量词是多余的:

/^0[1456789]-[0-9]{6}$/
Run Code Online (Sandbox Code Playgroud)

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

  • 另外,您的函数应该使用参数$ home_phone,而不是全局$ home_phone函数validHomePhone($ home_phone)并删除全局行. (3认同)