【问题标题】:Warning: preg_replace(): Compilation failed: invalid range in character class [duplicate]警告:preg_replace():编译失败:字符类中的无效范围[重复]
【发布时间】:2014-11-15 10:29:07
【问题描述】:

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

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

Line#53是这个..

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

基本上,我试图省略除字母之外的所有字符。我做错了什么?有没有更好更快/更好的方法来做到这一点?

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

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      /[^a-z]/i
      

      这将匹配除 a...z 之外的所有字符

      【讨论】:

      • 谢谢.. 那行得通。 :)
      猜你喜欢
      • 2020-06-08
      • 2022-11-22
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2023-03-25
      • 2020-03-20
      • 2019-09-19
      相关资源
      最近更新 更多