限制输入和文本区域中的不良词

时间:2018-08-06 16:23:12

标签: javascript jquery html css

我正在尝试针对错误词验证输入值和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:警告

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

3 个答案:

答案 0 :(得分:1)

我会删除单词中的所有空格,并使用包含进行比较。

因此,对于每一项,您将使用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))
})

答案 1 :(得分:0)

如果将fieldValue按空格分隔,则将不容易搜索坏词。最简单的解决方案是将split替换为 trim replace(/ /g,'')以替换所有空格,例如:

var badText = fieldValue.replace(/ /g,'');

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

答案 2 :(得分:0)

您可以将所有您不喜欢的单词存储在数组中,然后检查textarea的值是否包括其中的任何一个。

let badwords = ["badword", "flip", "hobgoblin", "turtleneck"], ele = document.querySelector.bind(document);
btn = ele("button"), ta = ele("textarea");

btn.addEventListener("click", () => {
  for(let badword of badwords) {
  if(ta.value.replace(/\s/gm, "").includes(badword)) return alert("found " + badword + "!");
  }
  alert("all clean!");
});
<textarea></textarea><button>detect!</button>