正则表达式列表匹配,不区分大小写

时间:2013-04-04 15:27:33

标签: javascript regex

我想使用正则表达式来确定用户提供的值是否存在于已批准值列表中,无论是否。这是当前JavaScript代码的一个简化示例,它可以匹配“JAN”,“Jan”和“jan” - 但不匹配“jAN”,“jAn”等:

var validateValue = function(field, patternName){
    "use strict"; //let's avoid tom-foolery in this function
    var pattern="";

    switch(patternName)
    {
    case "MMM": //month names only
        pattern=/^JAN|Jan|jan*$/;
        break;
    // other cases  and default follow in real code
    }

    if ( (!field.value.length) || pattern.test(field.value) ){
        //we're good (the field is blank or passes the regular expression test); remove field's error message, enable the submit button
    }
    else {
        //problems; let's show the error message and put focus back on problem field, disable the submit button
    }
};

我根据从“Case insensitive Regex without using RegexOptions enumeration”中学到的内容尝试了pattern=/^ (?i) JAN|Jan|jan*$/;,但这并没有成功(“未捕获的SyntaxError:无效的正则表达式...“)

用于评估值是否匹配,不区分大小写,列表项的正确正则表达式是什么?

2 个答案:

答案 0 :(得分:9)

您可以使用i(不区分大小写)修饰符,如下所示:

pattern = /^jan*$/i; // <-- it goes at the end

定义正则表达式的另一种方法是使用RegExp对象:

pattern = new RegExp("^jan*$", "i");

我觉得这个表格更具可读性。


另请注意,/^jan*$/i会匹配以下内容:

JAN
jannnn
jannNN
jAn

我不确定这是不是你想要的。


如果您只想匹配预定义的集合,您可以选择非正则表达式解决方案:

function isMonth(value) {
    var months = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec".split("|");
    return months.indexOf(value.toLowerCase()) !== -1;
}

答案 1 :(得分:3)

如果您不想使用正则表达式选项,可以尝试使用此正则表达式:

pattern = /^[Jj][Aa][Nn]$/