多个 OR 运算符与 elem.value.match

Multiple OR operators with elem.value.match

本文关键字:value match elem OR 运算符 多个      更新时间:2023-09-26

我一直在编写一个javascript函数,如果该值与大约4个值之一匹配(在下面的示例中仅为3个),则返回true。问题是,当我只有两个值时,函数可以正常工作,但添加第三个值会破坏代码。

我对javascript很陌生,我想有更好的方法可以做到这一点吗?我尝试过搜索,但尚未找到任何内容。

任何帮助都非常感谢。

function isValid(elem, helperMsg){
                var sn6 = /[sS][nN]6/;
                var sn5 = /[sS][nN]5/;
                var sn38 = /[sS][nN]38/;
                if(elem.value.match(sn6 || sn5 || sn38)){
                        //do stuff
                        return true;
                }else{
                        return false;
                }
            }

编辑:

这是我对数组的第二次尝试:

    function isLocal(elem, helperMsg){
        var validPostcodes=new Array();
            validPostcodes[0]= /[wW][rR]12/;       
            validPostcodes[1]= /[cC][vV]35/;
            validPostcodes[2]= /[sS][nN]99/;
            validPostcodes[3]= /[sS][nN]6/;
            validPostcodes[4]= /[sS][nN]5/;
            validPostcodes[5]= /[sS][nN]38/;
            validPostcodes[6]= /[oO][xX]29/;
            validPostcodes[7]= /[oO][xX]28/;
        var i = 0;
        for (i = 0; i < validPostcodes.length; ++i) {
            if(elem.value.match(validPostcodes[i])){
                    // do stuff
                    return true;
            }else{
                    alert(helperMsg);
                    elem.focus();
                    return false;
            }
        }
    }
a || b || c

是一个计算结果为布尔值的表达式。 这意味着您正在运行match(true)match(false)。 您必须将其编写为:

match(a) || match(b) || match(c)

另一种选择是将它们存储在数组中并循环访问它。 这意味着如果模式数量增加,则不必更改模式列表以外的代码。 另一种方法,虽然仅限于这种情况,但可能是将模式更改为等效于将三个选项组合在一起的模式(未经测试,我对正则表达式有点生疏):

elem.value.match(/[sSnN][6|5|38]/)

基于数组的示例:

var patterns = [/../, /.../];
for (var i = 0; i < patterns.length; ++i) {
    if (elem.value.match(patterns[i])) { return true; }
}

在实际代码中,我可能会将其格式化为:

function isValid(elem, helperMsg){
    var patterns = [/../, /.../],
        i = 0;
    for (i = 0; i < patterns.length; ++i) {
        if (elem.value.match(patterns[i])) {
            return true;
        }
    }
}

不过这只是一种习惯,因为 JavaScript 将变量提升到其范围的顶部。 绝不需要声明这样的变量。