Javascript 具有elem.value.match的多个OR运算符

Javascript 具有elem.value.match的多个OR运算符,javascript,Javascript,我一直在编写一个javascript函数,如果值与大约4个值中的一个(在下面的示例中只有3个)匹配,该函数将返回true。问题是,当我只有两个值时,函数工作正常,但添加第三个值会破坏代码 我对javascript非常陌生,我猜有更好的方法来实现这一点吗?我试过搜索,但到目前为止什么也没找到 非常感谢您的帮助 function isValid(elem, helperMsg){ var sn6 = /[sS][nN]6/; var

我一直在编写一个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;
            }
        }
    }
函数是本地的(elem,helperMsg){
var validPostcodes=新数组();
有效邮政编码[0]=/[wW][rR]12/;
有效邮政编码[1]=/[cC][vV]35/;
有效邮政编码[2]=/[sS][nN]99/;
有效邮政编码[3]=/[sS][nN]6/;
有效邮政编码[4]=/[sS][nN]5/;
有效邮政编码[5]=/[sS][nN]38/;
有效邮政编码[6]=/[oO][xX]29/;
有效邮政编码[7]=/[oO][xX]28/;
var i=0;
对于(i=0;i
是一个计算结果为布尔值的表达式。这意味着您正在运行
match(true)
match(false)
。您必须将其写为:

match(a) || match(b) || match(c)
另一种选择是将它们存储在一个数组中并在其上循环。这意味着,如果模式的数量增加,除了模式列表之外,您不必更改代码。另一种方法,尽管仅限于这种情况,可能是将模式更改为等同于或将三个选项组合在一起的模式(未经测试,我对regex有点生疏):

基于阵列的示例:

var patterns = [/../, /.../];
for (var i = 0; i < patterns.length; ++i) {
    if (elem.value.match(patterns[i])) { return true; }
}
var模式=[/../,/…/];
对于(变量i=0;i
在实际代码中,我可能会这样格式化它:

function isValid(elem, helperMsg){
    var patterns = [/../, /.../],
        i = 0;
    for (i = 0; i < patterns.length; ++i) {
        if (elem.value.match(patterns[i])) {
            return true;
        }
    }
}
函数有效(elem,helperMsg){
变量模式=[/../,/…/],
i=0;
对于(i=0;i
这只是一种习惯,因为JavaScript将变量提升到其作用域的顶部。不需要像那样声明变量

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

match(a) || match(b) || match(c)
另一种选择是将它们存储在一个数组中并在其上循环。这意味着,如果模式的数量增加,除了模式列表之外,您不必更改代码。另一种方法,尽管仅限于这种情况,可能是将模式更改为等同于或将三个选项组合在一起的模式(未经测试,我对regex有点生疏):

基于阵列的示例:

var patterns = [/../, /.../];
for (var i = 0; i < patterns.length; ++i) {
    if (elem.value.match(patterns[i])) { return true; }
}
var模式=[/../,/…/];
对于(变量i=0;i
在实际代码中,我可能会这样格式化它:

function isValid(elem, helperMsg){
    var patterns = [/../, /.../],
        i = 0;
    for (i = 0; i < patterns.length; ++i) {
        if (elem.value.match(patterns[i])) {
            return true;
        }
    }
}
函数有效(elem,helperMsg){
变量模式=[/../,/…/],
i=0;
对于(i=0;i

这只是一种习惯,因为JavaScript将变量提升到其作用域的顶部。绝对不需要像那样声明变量。

谢谢你的回答,我将有更多的通读,并尝试对其进行剖析。不幸的是,正则表达式的答案不起作用,因为还有其他邮政编码不以sn.Ah开头。在这种情况下,我可能会使用数组方法。如果您有什么特别需要帮助理解的地方,请告诉我,我会很高兴地编辑我的答案以使其更清楚。谢谢!我将在接下来的一个小时内尝试这一点,因此我一定会让你知道/接受你的答案。我刚刚尝试了它,并将我的代码添加到我的初始帖子中-使用数组,数组中的第一项可以正常工作,但其余项返回false。你的代码在功能上并不等效。在for循环中,您将根据元素检查每个模式。因此,如果在匹配模式之前到达失败模式,则执行else,发出警报,函数返回false。您需要做的是设置一个默认为false的标志。然后在可能的模式上循环。如果任何模式匹配,请将标志设置为true。然后,在循环之外,检查标志是否为真。感谢您的回答,我将有更多的通读并尝试剖析它。不幸的是,正则表达式的答案不起作用,因为还有其他邮政编码不以sn.Ah开头。在这种情况下,我可能会使用数组方法。如果您有什么特别需要帮助理解的地方,请告诉我,我会很高兴地编辑我的答案以使其更清楚。谢谢!我将在接下来的一个小时内尝试这一点,因此我一定会让你知道/接受你的答案。我刚刚尝试了它,并将我的代码添加到我的初始帖子中-使用数组,数组中的第一项可以正常工作,但其余项返回false。你的代码在功能上并不等效。在for循环中,您将根据元素检查每个模式。因此,如果在匹配模式之前到达失败模式,则执行else,发出警报,函数返回false。您需要做的是设置一个默认为false的标志。然后在可能的模式上循环。如果任何模式匹配,请将标志设置为true。然后,在循环外部,检查标志是否为真。