javascript中的三个Char月和文化匹配

时间:2013-05-10 00:21:37

标签: javascript

我有一个多文化网站,我允许用户以dd-MMM-yyyy格式输入值。我能够根据他们在C#中的文化来确定不同的价值观(May,English = May,German = Mai)

我遇到的问题是这几个月的javascript验证。我能够建立可接受的值列表:

英文:

^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$

德语:

^Jan$|^Feb$|^Mrz$|^Apr$|^Mai$|^Jun$|^Jul$|^Aug$|^Sep$|^Okt$|^Nov$|^Dez$

我只想让这个正则表达式不区分大小写。但我看到的所有引用都指向我/ gi标志,但我所有的例子都没有意义。我尝试了以下内容,但它不起作用:

var shouldMatch = "may";
var regexPattern = "^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/gi"
if(shouldMatch.match(regexPattern) != null) {
    //this should happen
}

我做错了什么?正则表达式帮助javascript杀了我。

5 个答案:

答案 0 :(得分:1)

jsFiddle Demo

但是尝试匹配“mAR”或“MAr”等呢?这很快成为一个有趣的场景。在我看来,一个简单的方法就是匹配大写

var shouldMatch = "May";
var regexPattern = "^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$";
if(shouldMatch.toUpperCase().match(regexPattern) != null) {
 alert("match");
}

答案 1 :(得分:1)

您的正则表达式应为字符串:

var shouldMatch = "may";
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i;
if(shouldMatch.match(regexPattern) != null) {
    // this seems happened
}

答案 2 :(得分:1)

regexPattern是一个字符串,而不是正则表达式。

在使用匹配项之前将其转换为RegExp:

var regexPattern = new RegExp("^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$", "gi");

此外,在使用之前将shouldMatch转换为大写:

shouldMatch = shouldMatch.toUpperCase();

答案 3 :(得分:0)

这应该适合你。

已更改为使用test

当你从“^”开始到结束“$”测试整个字符串时,不需要全局“g”标志

将字符串regexPattern更改为RegExp object

需要“i”标志,因为您需要不区分大小写。

的Javascript

var shouldMatch = "may";
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i;
if(regexPattern.test(shouldMatch)) {
    alert(shouldMatch);
}

jsfiddle

通过这样做,你也可以让它变得更短,更难看。

var regexPattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i;

jsfiddle

作为正则表达式的替代方法,您还可以使用String.indexOfArray.some,并尝试每种模式以查看它是否在您正在测试的字符串中。此示例将需要现代浏览器或旧版浏览器的“填充”/“填充”。如果你想匹配整个字符串而不是看它是否包含在中,你也可以检查等式“===”。

的Javascript

var shouldMatch = "may";
var patterns = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".split("|");
var matched = patterns.some(function (pattern) {
    if (shouldMatch.toLowerCase().indexOf(pattern.toLowerCase()) !== -1) {
        alert(shouldMatch);
        return true;
    }

    return false;
});

jsfiddle

答案 4 :(得分:0)

或者共同开展各种可能性 -

var Rx=/^(jan|feb|m(ar|rz)|apr|ma[iy]|jun|jul|aug|sep|o[ck]t|nov|de[cz])$/i

Rx.test('may');