preg_match(): 由于字符类范围无效,编译失败
错误消息“preg_match(): 编译失败:无效范围偏移量 20 处的字符类”表示正则表达式模式包含无效的字符类范围。在本例中,该问题是在服务器上升级 PHP 后突然出现的,我们将探讨原因。
错误原因:
PHP 7.3将 PCRE(Perl 兼容正则表达式)引擎升级到 PCRE2,这带来了一些变化,包括更严格的模式验证。特别是,现在在字符类中对连字符 (-) 的处理方式有所不同。
代码片段:
提供的代码使用正则表达式来验证用户名:
/^[a-z0-9]([0-9a-z_-\s])+$/i
在 PHP 的早期版本中,如果连字符被转义或放置在字符类中的任何位置,则可以使用连字符它不能被解释为范围的指示符。
PHP 7.3 的影响:
使用 PCRE2,连字符中的转义 () 不再被忽略类。这意味着在 PHP 7.3 及更高版本中,上面的代码应更新为:
/^[a-z0-9]([0-9a-z_-]\s)$/i
解决方案:
要解决编译错误,请确保连字符类遵循以下规则:
其他信息:
以上是为什么我的 PHP preg_match() 在升级到 PHP 7.3 后失败并出现'字符类范围无效”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!