正则表达式崩溃谷歌Chrome

时间:2015-04-05 20:58:39

标签: javascript google-chrome tampermonkey

我遇到了一个非常奇怪的问题。

首先是一些信息:
我正在研究手机号码的检测功能。 我检查了国家/地区,然后将电话号码与此列表进行比较:http://en.wikipedia.org/wiki/List_of_mobile_phone_number_series_by_country#Italy

我的问题是,一切正常,期待一个电话号码。出于隐私原因,我无法完全提供此处。

例A:+49 172 8420 ***
例B:+49 170 7900 ***

当我在这些电话号码上使用我的tampermonkey脚本时,一切都可以正常使用示例B.示例A导致整个浏览器崩溃。

现在它变得有趣了: 我做了一些调试,发现崩溃是由这些线引起的:

else if(number.match(/^\+39/)) // Italy
{

    if(number.match(/^\+39[0]?(310|110[015]|31[39]|32[0234789]|33[013456789]|34[0123456789]|3440|3505|3510|350|36[12368]|370|371[01]|3740|37[37]|38[0123589]|39[01237])/))
        return mobile;
    else
        return landline;

}

正如您所看到的,这种情况应仅对以+39开头的电话号码起作用,但崩溃发生在+49的德语号码上。 德国的数字将在其他一些国家之后的约60行检查。

有人可以解释一下这部分代码有什么问题以及它导致崩溃的原因吗?

提前致谢

其他信息: 我之前使用过另一个代码,我对上面的代码进行了优化。旧的就像两个电话号码上的魅力一样

        else if(number.match(/^\+39/)) // Italy
        {
            if(number.match(/^\+390310/) || number.match(/^\+3903110[015]/) || 
               number.match(/^\+39031[39/) || number.match(/^\+39032[023478/) || 
               number.match(/^\+39033[013456789]/) || number.match(/^\+39034[012356789]/) || 
               number.match(/^\+3903440/) || number.match(/^\+3903505/) || 
               number.match(/^\+3903510/) || number.match(/^\+390350/) || 
               number.match(/^\+39036[012368]/) || number.match(/^\+390370/) || 
               number.match(/^\+390371[01]/) || number.match(/^\+3903740/) || 
               number.match(/^\+39037[37]/) || number.match(/^\+39038[0123589]/) || 
               number.match(/^\+39039[01237]/))
                return mobile;
            else
                return landline;                
        }

0 个答案:

没有答案