如何从带有冒犯性单词的句子或混合搭配句中挑出冒犯性单词

时间:2018-10-22 08:09:22

标签: javascript

我想避免用户创建内容的区域(社交平台,例如用户在平台上为Post编写内容的地方)的冒犯性言语

为此,我有一个方法,其中有一个数组,该数组将存储所有令人反感的单词。

现在要检查该句子中是否包含任何令人反感的单词,我写了方法

//NOTE: This array has offensive words. But I have not written here for not spreading any vulgarity to this platform.
const offensiveHolder = ["Test1", "Test2", "Test3", "Test4", "Test5"];
    if (offensiveHolder.indexOf(req.body.word) > -1) {
      console.log("Username has exist offensive word");
    } else {
      console.log("Username has not exist offensive word");
    }

这是一个非常基本的脚本,可以识别单词是否完全像这样写...

假设我写了H1TEST1KL,所以在这里,如果我从开头删除H1,从结尾删除KL,那么这个词是令人反感的。

我的脚本将失败,因为它没有足够的逻辑来识别。 是有人可以通过某种方式来编写可以执行所需任务的逻辑的线索吗?

我希望该算法能够解决许多为用户交互构建平台并且不希望任何脏话破坏用户交互的人。

真的很感谢对此提出建议/帮助我的人

2 个答案:

答案 0 :(得分:4)

要解决问题中代码的基本问题,您需要采取另一种方法-而不是检查输入字符串是否与offensiveHolder数组中的字符串之一完全匹配(这很漂亮)。不太可能),检查const offensiveHolder = ["test1", "test2", "test3", "test4", "test5"]; function hasBadWord(input) { const lowerInput = input.toLowerCase(); return offensiveHolder.some(badword => lowerInput.includes(badword)); }; console.log(hasBadWord('fooTEST1bar')); console.log(hasBadWord('footest999bar')); console.log(hasBadWord('H1TEST1KL'));中的字符串{{1}}是否包含在输入字符串中。还要确保在比较之前将所有字符串都转换为小写:

{{1}}

答案 1 :(得分:0)

没有箭头功能的简单

var offensiveWords = ["test1", "test2", "test3", "test4", "test5"];


function hasBadWord(input){
return offensiveWords.some(function(offesnsiveWord) {
    return input.toLowerCase().includes(offesnsiveWord);
});
}

console.log(hasBadWord('H1TEST1KL'));
console.log(hasBadWord('H1TES91KL'));