添加亵渎过滤器

时间:2020-04-12 08:42:26

标签: javascript angular typescript

我正在尝试向我的网站添加亵渎性过滤器,但是我的代码有一些错误。

我希望有人写:" you are idiot ",它将被替换为:" you are ****"

但是它返回"*************"

var badWords = ['sex', 'fUck', 'dick', 'penis', 'cum', 'tits', 'fuck', 'homo', 'הומו'];
var regExpSource = badWords.join('|');
var regExpFilter = new RegExp(regExpSource, 'ig');

if(regExpFilter.test(this.message)==true)
this.message=this.message.replace(/./g,'*')

请问我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

这是一个不使用正则表达式的解决方案,而是一些简单的字符串替换逻辑。

var badWords = ['bad', 'word'] // cleaned just for the example
var messageWords = this.message.split(' ')

for (var i = 0; i < messageWords.length; i++) {
  if (badWords.includes(messageWord[i].toLowerCase())) {
    messageWords[i] = '***'
  }
}

var outputMessage = messageWords.join(' ')

可以针对标点符号等边缘情况进一步完善此解决方案。

答案 1 :(得分:0)

this.message.replace(/./g,'*')

正则表达式中的.表示“任何字符”。因此,这就是“用*替换任何字符。这正是您所看到的。

如果您只想用*替换正则表达式中的单词,则实际上需要使用替换该正则表达式,如下所示:

this.message.replace(regExpFilter, match => "*".repeat(match.length))