我试图根据长度和上下文限制用户使用的用户名。
在这里,当用户离开当前文本框时,如果找到禁用词,我会尝试将用户名标签设置为红色。
虽然代码看起来对我来说很好,但似乎它完全忽略了禁用的单词,并且如果满足其他条件,则无论如何都会使标签变为绿色。我的代码出了什么问题?
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";
}
}
};
答案 0 :(得分:1)
我可能不会使用\b
。如果您使用\b
,则用户只需键入一个发誓单词,然后添加任何字符,正则表达式将找不到任何内容。
此外,如果未找到最后一个禁用词,则验证颜色会因为您的else语句而显示为已通过。您应该只有一个单独的禁止字循环,并将值标记为有效或无效,并根据该值显示颜色。
答案 1 :(得分:1)
var forbiddenWords = ["fff, dddd, aaa, rrrr, oooo"];
很可能是一个错误,应该阅读
var forbiddenWords = ["fff", "dddd", "aaa", "rrrr", "oooo"];
你想要一个单独的字符串数组,而不是一个包含字符串的元素数组,该字符串有一些逗号和空格作为内容。