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


Warning: preg_replace(): Compilation failed: invalid range in character class

我在执行preg_replace时遇到一个PHP错误。

警告:preg_replace():编译失败:字符类中的无效范围,偏移量为xxx/item.php53行中的24

第#53行是这个。。

$itemid = substr(trim(strtolower(preg_replace('/[0-9_%:'[(&#@!~*).']''/-'s+]/','',$rsstitle))), 0, 8);

基本上,我试图省略除字母以外的所有字符。我做错了什么?有什么更好、更快/更好的方法吗?

在发布这篇文章时,尝试了这里建议的几个答案,但都不起作用。

感谢

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

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

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

/[^a-z]/i

这将匹配除a…z

之外的所有字符