Php 警告:preg_replace():编译失败:字符类中的范围无效

Php 警告:preg_replace():编译失败:字符类中的范围无效,php,Php,我在执行preg\u replace时遇到一个PHP错误 警告:preg_replace():编译失败:第xxx/item.php行53 这是第53行吗 $itemid = substr(trim(strtolower(preg_replace('/[0-9_%:\[(&#@!~*).\]\\/-\s+]/','',$rsstitle))), 0, 8); 基本上,我试图省略除字母以外的所有字符。我做错了什么?有没有更好更快/更好的方法 在发布此消息时尝试了此处建议的几个答案,但没有一

我在执行
preg\u replace
时遇到一个PHP错误

警告:preg_replace():编译失败:第xxx/item.php行53

这是第53行吗

$itemid = substr(trim(strtolower(preg_replace('/[0-9_%:\[(&#@!~*).\]\\/-\s+]/','',$rsstitle))), 0, 8);
基本上,我试图省略除字母以外的所有字符。我做错了什么?有没有更好更快/更好的方法

在发布此消息时尝试了此处建议的几个答案,但没有一个有效


谢谢

我会使用白名单而不是黑名单字符

/[^a-z]/i

这将匹配除…z以外的所有字符。我将使用白名单而不是黑名单字符

/[^a-z]/i

这将匹配除…z以外的所有字符。错误的原因是字符位置24处的破折号(-)被解释为范围标识符(例如,在0-9中表示0和9之间的任何数字字符),但/到空格不能解释为有意义的范围。可能最好转义破折号,或者可能将其移动到字符串的末尾


使用白名单的建议可能是一种很好的做法,但如果在给定白名单中允许使用破折号,那么同样的错误也很容易发生。

错误的原因是字符位置24处的破折号(-)被解释为范围标识符(例如,在0-9中表示0和9之间的任何数字字符)但是/to空格不能解释为有意义的范围。可能最好转义破折号,或者可能将其移动到字符串的末尾


使用白名单的建议可能是一种很好的做法,但如果在给定白名单中允许使用破折号,那么同样的错误也很容易发生。

谢谢。。成功了。:)谢谢成功了。:)