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 升级后 `preg_match()` 会失败并显示'字符类范围无效”?的详细内容。更多信息请关注PHP中文网其他相关文章!