由regex引起的Javascript语法错误 - 特定于Internet Explorer(所有版本)

时间:2016-12-27 23:32:01

标签: javascript jquery internet-explorer

我有一个从Cordova项目移植的Web应用程序,除了IE之外,它在所有常见浏览器上都没有问题。到目前为止,我已经在Chrome,Chromium,Firefox,Safari和Edge中测试了这个应用程序。

只要将以下行添加到代码中,Internet Explorer中的问题就会返回错误,指出“'submit'未定义”。

usr_id = /\[usr_id\] => (.*?)\n/gum.exec(response);

我的猜测是,转义字符在某种程度上打破了语法,但玩弄它并没有解决我的问题。

以下背景中的违规部分:

    function submit(){
        uname = $('#txt-uname').val();
        password = $('#txt-password').val();
        login(uname,password);
    }

    function login(tc,pass){
        $.ajax({
            type: 'POST',
            url:  webserviceURL+'login.php',
            data: {'tc':tc, 'password':pass},
            complete: function(r){
                response = r.responseText;

                if (response.indexOf("") > -1){
                    localStorage.setItem("login", "true");

                    usr_id = /\[usr_id\] => (.*?)\n/gum.exec(response);
                    localStorage.setItem("usr_id", 'test');

                }
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

您不能将u作为Internet Explorer中的unicode标志。它尚不支持。请将您的RegEx更改为:

usr_id = /\[usr_id\] => (.*?)\n/gm.exec(response);

此外,您可以通过检查以下内容的响应来检查支持:

RegExp.prototype.unicode

如果它支持浏览器,请使用u标志,因为它会在没有它的情况下破坏原始逻辑。至少,通过此更改,它可以在Internet Explorer中正常运行。可以使用以下方法检查:

(new RegExp()).unicode

它可能会在Internet Explorer中返回undefined,而在其他浏览器中则会返回false