php7.3 preg_match(): Compilation failed: invalid range in character class at offset

今天升级系统PHP版本到PHP7.3,发现站点某些功能没有正常工作。查看PHP错误日志,发现了如下提示:

preg_match(): Compilation failed: invalid range in character class at offset 4 in xxxx on line xxx

找到报错的PHP文件,该行对应的正则匹配为:

preg_match("/^[/w-:]+$/", $search)

根据提示,应该是第四个匹配符号”-“出了问题。

使用上述错误提示查找原因,发现原因是PHP 7.3开始,使用PCRE2作为新版的正则引擎,规则比PCRE更严格。根据PCRE2的要求,如果”-“用于匹配而非表示范围,那么必须转义或放在末尾。上面的正则表达式”-“不是用来表示a-z这样的范围,也不在末尾,因此出现警告,导致网站功能异常。

找到了原因,解决办法也很简单:使用反斜杆转义,即变成 preg_match("/^[/w/-:]+$/", $search)

参考

  1. preg_match(): Compilation failed: invalid range in character class at offset
  2. 一篇文章帮你了解 PHP 7.3 更新
  3. PHP自5.2到5.6中新增功能详解
留言评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code