0

我对 RegEx 还很陌生,并且觉得在处理 .htaccess 文件时我已经掌握了一些基础知识。我目前正在进行一些表单验证,以检查用户是否向系统输入了有效的序列号。系统可接受以下串行格式。

  • I-SERIAL-123
  • I-SERIAL123
  • 序列号-123
  • SERIAL123

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

当前表达式

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

但是 PHP 不断抛出“未找到结束分隔符”异常,我查看了几个 PHP 备忘单,但在我的语法中没有看到任何直接问题。

任何指针将不胜感激,谢谢。

4

1 回答 1

5

您需要在您的正则表达式周围使用分隔符,通常/是:

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)
于 2013-09-04T14:09:32.097 回答