我正在尝试针对不良词来验证输入值和textarea文本。
    下面的代码可以很好地处理单个Badword和包含Badword的句子。

badWords - contains the list of bad words
fieldValue contains input/Text area text

var badText = fieldValue.split(" ");
for (i = 0; i < badWords.length; i++)
{
    if(badWords[i] != "")
    {
        if(badText.indexOf(badWords[i].trim()) > -1){
            return true;
        }
    }
}
return false;


现在,我面临以下格式的问题。请建议我如何限制以下坏词Badword:B a d w o r d

编辑:问题不是如何过滤,而是如何找到单词之间用空格拼写的情况。

最佳答案

我会从单词中删除所有空格,并使用include比较每个空格。

因此,对于每个项目,您都可以使用regexp / /g替换以删除所有空格,然后将所有字母转换为小写字母,以便对两个字符串(输入字符串和错误单词字符串)使用toLowerCase()进行搜索时不区分大小写。



function getBadWords(str) {
  let badwords = ['spider', 'monkey', 'pig']
  let words = []
  badwords.forEach(word =>
    str.replace(/ /g, '').toLowerCase()
      .includes(word.replace(/ /g, '').toLowerCase()) ? words.push(word) : null)
  return words
}

const tests = [
  'I am a spider',
  'This looks like a p i g',
  'Look at that Mon Key',
  'That spider looks like a monkey',
  'Silly words',
  'Fancy S p i d e r'
]

tests.forEach(sentence => {
  let foundWords = getBadWords(sentence)
  console.log(foundWords)
  console.log('Is bad: ' + (foundWords.length > 0))
})

09-29 20:32