我想避免在用户创建内容的区域(社交平台,比如用户在平台上为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,那么这个词是冒犯的。
我的脚本会失败,因为它没有足够的逻辑来识别..。是有人有任何方法,我可以得到线索,写逻辑,可以执行我想要的任务.
我希望这个算法能解决很多为用户交互搭建平台的人,他们不想看到任何可能破坏用户交互的脏话。
真的很感谢有人为此建议/帮助我
发布于 2018-10-22 08:24:53
要解决问题中代码的基本问题,您需要采取相反的方法--而不是检查输入字符串是否与offensiveHolder数组中的一个字符串完全匹配(这很不可能),检查offensiveHolder中字符串的.some是否包含在输入字符串中。还要确保在比较之前将所有字符串转换为小写:
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'));
发布于 2018-10-22 14:05:44
简单的没有箭头功能,
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'));
https://stackoverflow.com/questions/52924838
复制相似问题