如果输入禁用词,如何抓住用户?

时间:2016-05-22 23:14:31

标签: javascript

我试图根据长度和上下文限制用户使用的用户名。

在这里,当用户离开当前文本框时,如果找到禁用词,我会尝试将用户名标签设置为红色。

虽然代码看起来对我来说很好,但似乎它完全忽略了禁用的单词,并且如果满足其他条件,则无论如何都会使标签变为绿色。我的代码出了什么问题?

var username = document.forms.LogInForm.username;
username.onblur = function() {

    var forbiddenWords = ["fff, dddd, aaa, rrrr, oooo"];
    var regex;
    var username_value = this.value.split('');

    for (var a = 0; a < forbiddenWords.length; a++) {
        regex = new RegExp('\\b' + forbiddenWords[a] + '\\b');
        if (username_value[username_value.length - 1] === "-" || username_value[username_value.length - 1] === "_") {
            console.log('Username cannot end in dash (-) or underscore (_). We removed it for you!');
            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 if (username.value.search(regex) >= 0) {
            console.log('Username contains swearing word. Please, remove it');
            document.getElementById('username_label').style.color = "red";
        }
        else {
            document.getElementById('username_label').style.color = "green";
       }
    }
};

2 个答案:

答案 0 :(得分:1)

我可能不会使用\b。如果您使用\b,则用户只需键入一个发誓单词,然后添加任何字符,正则表达式将找不到任何内容。

此外,如果未找到最后一个禁用词,则验证颜色会因为您的else语句而显示为已通过。您应该只有一个单独的禁止字循环,并将值标记为有效或无效,并根据该值显示颜色。

答案 1 :(得分:1)

var forbiddenWords = ["fff, dddd, aaa, rrrr, oooo"];

很可能是一个错误,应该阅读

var forbiddenWords = ["fff", "dddd", "aaa", "rrrr", "oooo"];

你想要一个单独的字符串数组,而不是一个包含字符串的元素数组,该字符串有一些逗号和空格作为内容。