Javascript RegExp对象在Chrome,Firefox中工作,但在IE 11中没有(正则表达式中的语法错误)

时间:2016-11-29 20:05:45

标签: javascript regex

我有以下正则表达式测试,它正在寻找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>

1 个答案:

答案 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?为什么要写[\/]而不是\/