当前位置:  开发笔记 > 编程语言 > 正文

PHP RegEx - 没有结束分隔符?

如何解决《PHPRegEx-没有结束分隔符?》经验,为你挑选了1个好方法。

我是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> Tim Pietzcke..:

你需要围绕正则表达式的分隔符,通常是/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)


为了更清楚,PHP在原始查询中看到`^`作为分隔符,并且因为字符串不以`^`结尾,所以你得到"找不到结束分隔符".
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有