【问题标题】:Regular Expression PHP not validating correctly正则表达式 PHP 未正确验证
【发布时间】:2013-05-10 13:34:37
【问题描述】:

我正在尝试为我的代码编写一个正则表达式,该正则表达式用于验证电话号码格式,前两位数字应该是 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);
}

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

【问题讨论】:

  • 您的正则表达式中不需要分隔符吗?
  • 我还想推荐您的正则表达式的简化版本/0[14-9]-\d{6}/

标签: php regex validation preg-match


【解决方案1】:

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

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

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

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

当我们这样做时,{1} 量词是多余的:

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

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

【讨论】:

  • 顺便说一句,您的函数应该采用参数 $home_phone,而不是全局 $home_phone 函数 validHomePhone($home_phone) 并擦除全局线路。
  • 我首先尝试在开头和结尾只使用/,但没有尝试使用^$,我虽然没有它们也可以工作,所以不会不需要他们谢谢乔恩
  • @aizen92:还要注意上面的 beiller 的评论,他是 200% 正确的。
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多