我正在尝试向我的网站添加亵渎性过滤器,但是我的代码有一些错误。
我希望有人写:" 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,'*')
请问我的错误在哪里?
答案 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))