如何检查一系列禁用词?

时间:2016-05-23 00:45:28

标签: javascript html

如果用户在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";
        }
    }
}

2 个答案:

答案 0 :(得分:3)

仅在循环完成后才尝试返回false,而不是每次迭代all。这样,如果有的话,返回true将打破循环,否则当循环完成时,所有都将被确定为假。

现在,只要遇到 first false,函数就会返回false并忽略数组中的任何后续字词

else

正如数组

中的其他答案修复引号所述

答案 1 :(得分:2)

您的禁词数组目前包含1个字:"ffff, aaaa, bbbb, hhhh, ggggg"。如果您将此代码用作数组,则代码可以正常运行:

var forbiddenWords = ["ffff", "aaaa", "bbbb", "hhhh", "ggggg"];