错误消息“preg_match(): 编译失败:字符类中的范围无效”表示存在问题与提供的代码中使用的正则表达式。 PHP 升级后可能会出现此问题,特别是由于 PCRE2 库的更改而从早期版本迁移到 PHP 7.3 或更高版本时。
使用 PHP 7.3 ,PHP PCRE引擎过渡到PCRE2,导致几个向后不兼容的问题更改:
在 PHP 7.3 之前,连字符可以在字符类中的任何位置使用(如果转义或放置在它们不能使用的地方)不表示范围。但是,在 PHP 7.3 及更高版本中,PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL 默认设置为 false。
因此,要在字符类中包含连字符:
在提供的代码中,有问题的行是:
if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
问题出在字符内的连字符 (-)类 [0-9a-z_-s]。要修复此问题,请将连字符放在末尾或开头:
if(!preg_match("/^[a-z0-9]([0-9a-z\_-\s0-9a-z\_-\s])+$/i", $subuser)){
“PHP 7.3:PCRE2 已删除 PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL” 提供了进一步的见解:
PCRE2在模式验证方面更加严格,因此升级后,一些您现有的模式无法再编译。
因此,可能需要对现有模式进行仔细审查和修改,以确保与 PHP 7.3 及更高版本中的 PCRE2 兼容。
以上是升级到 PHP 7.3 后,为什么我的 PHP 正则表达式会生成'preg_match(): 编译失败:字符类中的范围无效”?的详细内容。更多信息请关注PHP中文网其他相关文章!