我有一个多文化网站,我允许用户以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杀了我。
答案 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);
}
上
通过这样做,你也可以让它变得更短,更难看。
var regexPattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i;
上
作为正则表达式的替代方法,您还可以使用String.indexOf和Array.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;
});
上
答案 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');