Javascript 如何检查一组被禁止的单词?

Javascript 如何检查一组被禁止的单词?,javascript,html,Javascript,Html,如果用户在keyup上输入禁止的单词,我会尝试将标签设置为红色。我可以用一个词做到这一点,但无论我做了什么尝试,当涉及到多个词时,我都失败了 这是我的代码: username.onkeyup = function() { var forbiddenWords = ["ffff, aaaa, bbbb, hhhh, ggggg"]; var username_value = this.value.split(''); function isForbiddenWord(v

如果用户在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";
        }
    }
}
username.onkeyup=function(){
var forbiddenWords=[“ffff、aaaa、bbbb、hhhh、ggggg”];
var username_value=this.value.split(“”);
函数为禁止字(值){
for(var i=0;i
仅在循环完成后才尝试返回false,而不是每次迭代都返回false。这样,如果任何值为true,则返回true将中断循环,否则当循环完成时,所有值都将被确定为false

现在,一旦遇到第一个false,函数将返回false,并将忽略数组中的任何后续字

function isForbiddenWord(value) {
    for (var i = 0; i < forbiddenWords.length; i++) {
        var rgx = new RegExp(forbiddenWords[i], 'gi');
        if (rgx.test(value)) {
            return true;   
        }
        // move this outside loop
        //else {
           // return false;
        //}
    }
    return false;
}
函数为禁止字(值){
for(var i=0;i

正如在数组中的其他答案修复引号中所指出的那样,请仅在循环完成后才尝试返回false,而不是在每次迭代中都返回false。这样,如果任何值为true,则返回true将中断循环,否则当循环完成时,所有值都将被确定为false

function isForbiddenWord(value) {
    for (var i = 0; i < forbiddenWords.length; i++) {
        var rgx = new RegExp(forbiddenWords[i], 'gi');
        if (rgx.test(value)) {
            return true;   
        }
        // move this outside loop
        //else {
           // return false;
        //}
    }
    return false;
}
现在,一旦遇到第一个false,函数将返回false,并将忽略数组中的任何后续字

function isForbiddenWord(value) {
    for (var i = 0; i < forbiddenWords.length; i++) {
        var rgx = new RegExp(forbiddenWords[i], 'gi');
        if (rgx.test(value)) {
            return true;   
        }
        // move this outside loop
        //else {
           // return false;
        //}
    }
    return false;
}
函数为禁止字(值){
for(var i=0;i

正如在数组中的其他答案修正引号中所指出的那样,您的禁止词数组当前由一个词组成:
“ffff,aaaa,bbbb,hhhh,ggggg”
。如果将其用作数组,则代码有效:

function isForbiddenWord(value) {
    for (var i = 0; i < forbiddenWords.length; i++) {
        var rgx = new RegExp(forbiddenWords[i], 'gi');
        if (rgx.test(value)) {
            return true;   
        }
        // move this outside loop
        //else {
           // return false;
        //}
    }
    return false;
}
var forbiddenWords = ["ffff", "aaaa", "bbbb", "hhhh", "ggggg"];

您的禁用字数组当前由1个字组成:
“ffff,aaaa,bbbb,hhhh,ggggg”
。如果将其用作数组,则代码有效:

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


这正是我脑海中闪过的最后一件事!非常感谢@M4tini!您还需要发布@charlietfl补丁,否则它将只检测
“ffff”
对,我明白为什么它只执行第一个补丁了。如果我按照@charlietfl发布的方式来做,那也不会是假的吧?我的意思是,如果单词被禁止,则返回true并结束循环,然后返回false。这就是我所理解的。一个函数只能返回一件事,因此如果达到
return true
,它将不会到达返回false的部分。我现在完全理解了。谢谢@m4,这正是我脑海中的最后一件事!非常感谢@M4tini!您还需要发布@charlietfl补丁,否则它将只检测
“ffff”
对,我明白为什么它只执行第一个补丁了。如果我按照@charlietfl发布的方式来做,那也不会是假的吧?我的意思是,如果单词被禁止,则返回true并结束循环,然后返回false。这就是我所理解的。一个函数只能返回一件事,因此如果达到
return true
,它将不会到达返回false的部分。我现在完全理解了。谢谢@M4,这有什么区别?只是增加了额外的一行文字来解释区别。在您的头脑中运行它…或者在浏览器控制台的调试器中运行它。一旦遇到任何错误,就会返回,其他单词也不会被测试如果我这样做,你的方式也不会是错误的?我的意思是,如果这个词被禁止,它就会返回真值。循环结束时,返回false。所以,这是错误的。。。这就是我所理解的。不…我的方式只有在所有的都是假的时候才会返回false。请记住,一个函数中只能执行一个
return
。一旦执行了未执行的任何代码,建议:删除
g
标志,这是不需要的,并且可以降低某些引擎的速度。这有什么区别?只需添加额外的文本行来解释差异。在您的头脑中运行它…或者在浏览器控制台的调试器中运行它。一旦遇到任何错误,就会返回,其他单词也不会被测试如果我这样做,你的方式也不会是错误的?我的意思是,如果这个词被禁止,它就会返回真值。循环结束时,返回false。所以,这是错误的。。。这就是我所理解的。不…我的方式只有在所有的都是假的时候才会返回false。请记住,一个函数中只能执行一个
return
。一旦在未执行后执行任何代码,一个建议是:删除
g
标志,它是不需要的,并且可以降低某些引擎的速度。不循环的简单方法:
isbankedenword=/../.test.bind(RegExp(\\b(“)+