【问题标题】:preg_replace ranged out - compilation failedpreg_replace 超出范围 - 编译失败
【发布时间】:2023-03-25 16:38:01
【问题描述】:

在我的代码中:


$c = preg_replace('#[^a-z0-9áčďéěíňóřšťúůýž_-:().,;!?]#i', '', $_POST['c']);


我收到此错误:
警告:preg_replace() [function.preg-replace]:编译失败:偏移量 40 处的字符类范围乱序


IDK 哪里可能出错。

【问题讨论】:

  • 你想做什么?删除任何非字母数字字符?
  • 试试这个:$c = preg_replace('#[^a-z0-9áčďéěíňóřšťúůýž\_\-\:\(\)\.\,\;\!\?]#i', '', $_POST['c']);
  • @LatheesanKanes 不,我想,只允许设置的那些。它是用于 cmets 的文本字段的正则表达式。
  • @LatheesanKanes 这就是问题所在 - 转义该字符。解决了我的问题。
  • @LatheesanKanes:没有必要转义所有这些字符,因为它们在字符类中。

标签: php regex preg-replace


【解决方案1】:

这样做:

$c = preg_replace('#[^a-z0-9áčďéěíňóřšťúůýž_\-:().,;!?]#i', '', $_POST['c']);

您需要在方括号 [..] 内转义 -,因为它被视为间隔说明符

【讨论】:

  • 或者放在字符类的开头或者结尾。尽管如此 +1。
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 2020-06-08
  • 2014-11-15
  • 2010-11-11
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多