【问题标题】:PHP regex to strip all characters except letters, numbers, commas, hyphens and underscoresPHP 正则表达式去除除字母、数字、逗号、连字符和下划线以外的所有字符
【发布时间】:2015-10-07 06:09:13
【问题描述】:

我正在尝试在正则表达式中使用字符串来去除除字母、数字、逗号、连字符和下划线之外的所有字符。

这是我目前使用的正则表达式:

$clean_input = preg_replace("/[^,-\w]+/", "", $input);

它在我的 PHP 日志中返回此警告

PHP Warning: preg_replace(): Compilation failed: invalid range in character class at offset 5 in [file]...

以前我使用了完全相同的正则表达式,但没有逗号字符,它确实有效(除了它仍然明显地去除逗号)。它看起来像这样:

$clean_input = preg_replace("/[^-\w]+/", "", $input);

如果您查看this example 我在在线正则表达式测试器工具中制作的内容,它会显示与我在代码中的完全相同的设置。它按照我的预期返回结果,除去逗号以外的所有内容。

是什么可能导致这个逗号字符出现问题。我试图逃避它,但这给出了同样的警告。感谢您的帮助正则表达式神!

【问题讨论】:

  • 如果你想删除除字母、数字或逗号之外的所有内容,那么为什么要将 - 放在 char 类中?
  • 下划线呢?
  • 抱歉,我知道哪里出了问题。我已经更新了标题

标签: php regex


【解决方案1】:

只需将- 放在开头或结尾,因为char 类中的连字符有special meaning。并且不要忘记将逗号放在否定字符类中。

$clean_input = preg_replace("/[^-\w,]/", "", $input);

【讨论】:

  • 一点额外说明:[...] 和下划线。 :)
  • @AvinashRaj 我想你只需要向 OP 解释一下,-character classes 中具有特殊含义
猜你喜欢
  • 2015-10-16
  • 2011-08-29
  • 2012-03-09
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多