发誓过滤正则表达式

时间:2012-12-23 15:37:26

标签: javascript regex

我需要一个匹配某个字符串的正则表达式,并用符号替换它的每个字母。

因此...... "Cheese"将替换为"******",但"Pie"将替换为"***"

例如:

"my pie is tasty and so is cake".replace(new RegExp(/(pizza|cake|pie|test|horseshoe)/gi), "'*' x length($1)")

(显然替换不存在)

3 个答案:

答案 0 :(得分:5)

我个人认为这是一个非常糟糕的主意,因为:

  • 会破坏有效用户的有效文字。
  • 使用拼写错误很容易欺骗过滤器,因此不会妨碍恶意用户。

但是要解决您的问题,您可以传递一个替换函数:

var regex = /(pizza|cake|pie|test|horseshoe)/gi;
var s = "my pie is tasty and so is cake";
s = s.replace(regex, function(match) { return match.replace(/./g, '*'); });

答案 1 :(得分:3)

免责声明:These filters don't work.。话虽如此,您可能希望将回调函数与replace

一起使用
"my pie is tasty and so is cake".replace(/(pizza|cake|pie|test|horseshoe)/gi, function (match) {
    return match.replace(/./g, '*');
});

工作示例:http://jsfiddle.net/mRF9m/

答案 2 :(得分:0)

要防止前面提到的classic issue @ThiefMaster,您可以考虑在模式中添加字边界。但是,请记住,您仍然需要处理这些单词的复数和拼写错误的形式。

var str = 'pie and cake are tasty but not spies or protests';
str = str.replace(/\b(pizza|cake|pie|test|horseshoe)\b/gi, function (match) {
    return match.replace(/\w/g, '*');
});