PHP RegEx - 没有结束分隔符?

时间:2013-09-04 14:07:28

标签: php regex

我是RegEx的新手,当我使用我的.htaccess文件时,我觉得我有点掌握了基础知识。我目前正在进行一些表单验证,以检查用户是否向系统输入了有效的序列号。系统可以接受以下串行格式。

  • I-SERIAL-123
  • I-SERIAL123
  • SERIAL-123
  • SERIAL123

我正在使用preg_match函数检查是否满足此表达式,如果是,则提交字段。

当前表达

if (preg_match("^[A-Z0-9\-]{5}$", $_GET['serial']) === false) 

然而,PHP不断抛出“找不到结束分隔符”的异常,我查看了几个PHP备忘单,我的语法中没有立即出现任何问题。

非常感谢任何指示,谢谢。

1 个答案:

答案 0 :(得分:5)

您需要围绕正则表达式分隔符,通常是/ s:

if (preg_match("/^[A-Z0-9\-]{5}$/", $_GET['serial']) === false)
                ^---------------^

但是任何非字母数字字符都是有效的(即使是成对的括号),尽管最有意义的是使用~#或其他符号,这些符号不是正则表达式元字符或经​​常用于文本搜索:

if (preg_match("#^[A-Z0-9\-]{5}$#", $_GET['serial']) === false)

在你的情况下,正如Andy Lester所指出的那样,正则表达式引擎认为^应该是分隔符(可能,但你失去了“字符串的开始”锚,用于你的正则表达式和必须使用\A代替:

if (preg_match("^\A[A-Z0-9\-]{5}$^", $_GET['serial']) === false)