我正在尝试针对错误词验证输入值和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:警告
编辑:问题不是如何过滤,而是如何找到单词之间用空格拼写的情况。
答案 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>