Я пытаюсь сделать ярлык красным, если пользователь вводит запрещенное слово на клавиатуре. Я могу сделать это одним словом, но независимо от того, что я пробовал, я потерпел неудачу, когда дело дошло до нескольких.Как проверить массив запрещенных слов?
Это мой код:
username.onkeyup = function() {
var forbiddenWords = ["ffff, aaaa, bbbb, hhhh, ggggg"];
var username_value = this.value.split('');
function isForbiddenWord(value) {
for (var i = 0; i < forbiddenWords.length; i++) {
var rgx = new RegExp(forbiddenWords[i], 'gi');
if (rgx.test(value)) {
return true;
}
else {
return false;
}
}
}
if (isForbiddenWord(this.value) == true) {
console.log('Username contains swearing word. Please, remove it');
document.getElementById('username_label').style.color = "red";
}
else {
if (username_value[username_value.length - 1] === "-" || username_value[username_value.length - 1] === "_") {
console.log('Username cannot end in dash (-) or underscore (_)');
this.value = this.value.slice(0, -1);
}
else if (this.value.length < 4) {
console.log('Username cannot be less than 4 characters');
document.getElementById('username_label').style.color = "red";
}
else {
document.getElementById('username_label').style.color = "green";
}
}
}
простой способ без зацикливания:.. 'IsForbiddenWord =// test.bind (RegExp ("\\ Ь (" + [ "FFFF"," aaaa "," bbbb "," hhhh "," ggggg "]. join (") | (") +") \\ b ")' – dandavis
У меня есть 30 запрещенных слов ... –
RegExp может обрабатывать 30 слов. 300. Вероятно, 3000 ... я возьму собственную функцию над пользовательской землей в любой день, и без циклов и нескольких тестов(), один выстрел, вероятно, будет намного быстрее. Единственный недостаток, который я могу думать из-за того, что «запрещенные слова» меняются между исполнением, вам нужно будет перестроить RegExp. – dandavis