首页 >后端开发 >php教程 >为什么我在 PHP 升级后收到'preg_match(): 编译失败:字符类中的范围无效”?

为什么我在 PHP 升级后收到'preg_match(): 编译失败:字符类中的范围无效”?

Barbara Streisand
Barbara Streisand原创
2024-12-09 21:48:15829浏览

Why Am I Getting

PHP 升级后字符类中的范围无效

此错误,“preg_match(): 编译失败:偏移处字符类中的范围无效20,”通常发生在 PHP 升级对 PCRE 引擎或您的应用程序中使用的 Unicode 引擎进行更改时。

PHP PCRE2 迁移

PHP 7.3 及更高版本使用 PCRE2,它引入了一些向后不兼容的更改。其中一项更改是对字符类模式进行更严格的验证。

字符类中的连字符

以前,您可以转义连字符 (-) 并在字符串中的任何位置使用它。字符类。但是,从 PHP 7.3 开始,您必须仅将连字符放在字符类的开头或结尾。

解决方案

要解决此错误,请确保连字符 (-) 在字符类中正确放置。如果需要在类中使用连字符作为字符,则必须对其进行转义(例如 -)。

示例

// Invalid (in PHP 7.3+)
preg_match("/^[a-z0-9]([0-9a-z_\-\s])+$/i", $subuser);

// Valid (in PHP 7.3+)
preg_match("/^[a-z0-9]([0-9a-z\-_\s])+$/i", $subuser);

其他注意事项

  • PCRE2 具有更严格的Unicode 引擎,这可能会影响某些无效模式的行为。
  • 确保您的代码对字符类使用正确的连字符位置,以避免编译错误。
  • 有关更多详细信息,请参阅 PHP 文档关于这些更改和兼容性问题。

以上是为什么我在 PHP 升级后收到'preg_match(): 编译失败:字符类中的范围无效”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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