-1

我想使用正则表达式来确定用户提供的值是否存在于已批准值的列表中,无论 case。这是当前 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
    }
};

我根据从“不使用 RegexOptions 枚举的情况下不区分大小写的正则表达式”中学到的东西尝试了pattern=/^(?i),但这并不能解决问题(“未捕获的 SyntaxError:无效的正则表达式......”)JAN|Jan|jan*$/;

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

4

2 回答 2

10

您可以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;
}
于 2013-04-04T15:28:21.480 回答
3

如果你不想使用正则表达式选项,你可以试试这个正则表达式:

pattern = /^[Jj][Aa][Nn]$/
于 2013-04-04T15:30:16.227 回答