PHP 升级导致字符类范围内 preg_match() 编译失败
报错“preg_match(): Compilation failed: invalid range in当使用 PHP 的 preg_match 函数验证字母数字用户名时,经常会出现“偏移量处的字符类”的情况。此错误已报告在服务器上的 PHP 升级后出现。
该问题源于 PHP 7.3 及更高版本中引入的最新更改。 PHP 已将其 PCRE 引擎迁移到 PCRE2,这带来了更严格的模式验证。具体来说,它涉及字符类中连字符 (-) 的使用。
在 7.3 之前的 PHP 版本中,可以通过转义连字符或将它们放在字符的开头或结尾来在字符类中使用连字符。范围。然而,在 PHP 7.3 及更高版本中,PCRE2 引擎收紧了这一要求。
出现该错误是因为字符类 [a-z0-9]([0-9a-z_-s]) 中的连字符$ 不在范围的开头或结尾。这会导致编译失败。
要解决此问题,您应该修改字符类,如下所示:
/[a-z0-9]([0-9a-z-_ ]+)+/i
通过将连字符放在范围末尾,它将是解释为类中的文字字符,而不是指示范围。
需要注意的是,随着 PHP 的更新,可能引入了其他模式语法更改7.3.有关这些更改以及它们如何影响您的代码的更多信息,请参阅有关 PCRE2 迁移的官方 PHP 文档。
以上是为什么我的 `preg_match()` 在 PHP 升级后失败?的详细内容。更多信息请关注PHP中文网其他相关文章!