我有以下正则表达式测试,它正在寻找nn / nnnn格式的日期,即01-12 / 20nn或01-12 / 19nn - 即一个月后跟一年粗略的意义。
我拥有的是/^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/
,它可以在Chrome和Firefox上正常使用,但在IE 11上失败并显示错误Syntax error in regular expression
。
正则表达式也通过www.regex101.com上的测试,并按预期执行。
我在下面列出了一个完整的例子 - 我有点卡住了,因为我确信正则表达式绝对没问题。
任何帮助都会非常感激 - 我做错了什么?
<!DOCTYPE html>
<html lang="en">
<head>
<title>This is the title</title>
<script type="text/javascript">
var pattern = new RegExp(/^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/, 'i');
var goodInput = "12/2012";
var badInput = "1b/g212";
if(!pattern.test(goodInput))
{
console.log("Good Input was NOT OK");
}
else
{
console.log("Good Input was OK");
}
if(!pattern.test(badInput))
{
console.log("Bad Input was NOT OK");
}
else
{
console.log("Bad Input was OK");
}
</script>
</head>
<body>
This is the body
</body>
</html>
答案 0 :(得分:2)
您正在从现有的正则表达式创建new RegExp
。这是IE11不支持的ES6功能。有关详细信息,请参阅this blog post。可以在here找到此用法的浏览器兼容性详细信息。它在the spec中描述;请注意 patternIsRegexp 案例。
以下任何一种都可以使用:
var pattern = /^([0-1][0-9][\/]([1][9]|[2][0])[0-9][0-9])$/i;
或
var pattern = new RegExp("^([0-1][0-9][/]([1][9]|[2][0])[0-9][0-9])$", "i");
顺便问一下,为什么要写[1]
代替1
?为什么要写[\/]
而不是\/
?