如果用户在keyup上输入禁用词,我会尝试将标签设为红色。我可以用一个词来做到这一点,但无论我尝试过什么,当涉及到多重时,我都失败了。
这是我的代码:
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";
}
}
}
答案 0 :(得分:3)
仅在循环完成后才尝试返回false,而不是每次迭代all
。这样,如果有的话,返回true将打破循环,否则当循环完成时,所有都将被确定为假。
现在,只要遇到 first false,函数就会返回false并忽略数组中的任何后续字词
else
正如数组
中的其他答案修复引号所述答案 1 :(得分:2)
您的禁词数组目前包含1个字:"ffff, aaaa, bbbb, hhhh, ggggg"
。如果您将此代码用作数组,则代码可以正常运行:
var forbiddenWords = ["ffff", "aaaa", "bbbb", "hhhh", "ggggg"];