首页 >后端开发 >php教程 >为什么 PHP 升级后 `preg_match()` 会失败并显示'字符类范围无效”?

为什么 PHP 升级后 `preg_match()` 会失败并显示'字符类范围无效”?

DDD
DDD原创
2024-12-09 01:11:10641浏览

Why Does `preg_match()` Fail with

preg_match(): PHP 升级后字符类范围无效

错误“preg_match(): 编译失败:字符范围无效class at offset”通常发生在常规字符集的字符类中错误使用连字符 (-) 时。

在提供的代码片段中:

else if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){

字符类 [0-9a-z_-s] 中有一个连字符“-”。在旧版本的 PHP 中,使用反斜杠转义连字符,或将其放在字符类的开头或结尾,允许使用它。

PHP 7.3 和 PCRE2 更改

但是,随着 PHP 7.3 和迁移到 PCRE2 库,连字符的使用受到更多限制。在 PCRE2 中,连字符只能用在字符类的开头或结尾。

要解决此问题,请修改字符类,如下所示:

else if(!preg_match("/^[a-z0-9]([0-9a-z_0-9_-])+$/i", $subuser)){

这会将连字符放在字符类的开头,使其能够正确使用。

附加注意

  • 按照提供的答案中的建议,在 PHP 7.3 及更高版本中不再需要使用 转义连字符。
  • PCRE2 库可能会在常规中引入其他更改表达式语法。升级到 PHP 7.3 或更高版本时,查看文档并对代码进行必要的调整非常重要。

以上是为什么 PHP 升级后 `preg_match()` 会失败并显示'字符类范围无效”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn