我需要实现类似下面的代码,如果用户输入了例如(you are bad
),它会显示警告。以下代码无法正常工作,因为它只会在不读取badAppend中的内容时提醒单词(you are
)。
var badAppend= ["freak", "ugly", "bad"]
var badWords = [("you are"+badAppend)];
if((badWords)
{
alert("you cannot use this word/sentence");
return false;
}
我正在努力避免这样做,以避免像下面这样做:
var badWords = ["you are bad", 'you are ugly", "you are freak"];
等。
如果有人能帮助我,我会非常感激。问候。
答案 0 :(得分:1)
var newWords = $(badAppend).map(function(item) { return "you are " + item; });
这会给你
newWords = [ "you are freak", "you are ugly", "you are bad" ];
答案 1 :(得分:1)
一种更为香草的JavaScript方式,在这个方面,你首先对一组“坏词”进行“黑名单”检查,只打印允许的句子:
var words = document.getElementById('userInput').value.split(" ");
var badWords = ['array', 'of', 'bad', 'words'];
for (i = 0; i < words.length; i++) {
for (ii = 0; ii < badWords.length; ii++) {
var exists = words.indexOf(badWords[ii]);
if (exists != -1) {
words.splice(exists, 1);
}
}
var result = document.getElementById('notInside');
result.innerHTML += words[i];
result.innerHTML += "</br>";
}
我知道他正在使用jQuery,但作为另一个例子,可以为其他可能需要它的人做这件事。如果您只需要显示数组中的ARE,请执行以下操作:
var words = document.getElementById('userInput').value.split(" ");
var badWords = ['array', 'of', 'bad', 'words'];
for (ii = 0; ii < badWords.length; ii++) {
var exists = words.indexOf(badWords[ii]);
if (exists > -1) {
var result = document.getElementById('inside');
result.innerHTML += words[exists];
result.innerHTML += "</br>";
}
}
答案 2 :(得分:1)
我会做这样的事情,
var match = $('div.text').text().match(/[yY]ou(('re)|(\sare))\s\w+/g);
if(match){
match = match.map(function(item){
return (item.substring(item.lastIndexOf(" ")+1)).toLowerCase();
});
var match2 = $(match).filter(badWordsArray);
if(match2.length > 0){
console.log('Bad word!');
}else{
console.log('Input is clean!');
}
}else{
console.log('Input is clean!');
}
将第一行中的文本选择器更改为您需要的任何内容。
这将浏览用户输入的所有文字,匹配其中一个后面的所有单词:
match
变量将是一个包含所有这些单词的数组,然后您可以根据错误的单词数组对其进行过滤,看看是否有任何不良单词。
如果没有那四个&#34;你在代码中它只是记录输入是干净的,否则它会检查小写的坏词。
如果您确定只需要完全匹配'you are'
,那么可以用这个替换正则表达式,它也会运行得更快。 /(you\sare)\s\w+/g
答案 3 :(得分:1)
根据我的理解,你有一个坏词词典,你试图阻止用户使用这些词。在这种情况下,您可以执行以下操作:
var containsBadWords = function(words){
var badWords = ['bad', 'ugly', 'freak' /* ...*/];
var badWordCount = 0;
words.forEach(function(word){
if(badWords.indexOf(word)>-1) badWordCount++;
});
return badWordCount;
}
var userWords = 'i am bad you are bad';
var result = containsBadWords(userWords.split(' '));
if(result>0) alert();