jquery - 使用正则表达式验证货币时 IE 8 崩溃

标签 jquery regex internet-explorer

我编写了一堆代码来获得有效的支出金额条目(32.4554234,324.34 等)。我还编写了代码来限制用户输入超过 13 位数字(不包括 .,)。

所有这些都在 Firefox 中完美运行。但在 IE 8 中,位数超过 13 后,如果输入字母,Internet Explorer 就会挂起并崩溃!在调试时,我注意到它在正则表达式行上出现错误,但相同的正则表达式工作正常,直到不超过 13 的限制!麻烦各位专家了!让我看到光!

function isIncorrectSpend(cubeCurrencySpend) {  
    if(!(/^([1-9]*[0-9]*,?[0-9]*)* (\.[0-9]*)?$/.test(cubeCurrencySpend))) {
        return true;
    }
    return false;
}

function isLongerThanThirteenDigits(cubeCurrencySpend) {
    cubeCurrencySpend = cubeCurrencySpend.replace(/,/g, "").replace(/\./g, "");
    if(cubeCurrencySpend.length>12) { 
        return true;
    }
    return false;
}

jQuery("input#minval").keyup( function() {
    if(isIncorrectSpend(jQuery("input#minval").val())) {
        jQuery("input#minval").val("");
        alert("please enter correct spend value");
    }        
});
jQuery("input#minval").keypress( function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if(isLongerThanThirteenDigits(jQuery("input#minval").val()) && (code > 47 && code < 58)) {
        alert("Please enter a number less than 13 digits");
        return false;
    }
    return true;
});

最佳答案

我很确定这是catastrophic backtracking的情况。你的正则表达式有太多的可能性需要检查,直到它失败。

问题出在这部分

([1-9]*[0-9]*,?[0-9]*)*

而且我很确定它没有按照您的预期进行操作。

这将匹配相同的内容,但会失败得更快:

/^[1-9]*[0-9,]*(\.[0-9]+)?$/

它仍然允许像 1,,,,,,,,.123 这样的东西,但比你的好得多。如果你想禁止这样的事情,你需要明确你的要求。

关于jquery - 使用正则表达式验证货币时 IE 8 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377022/

相关文章:

javascript - 如何使用 jquery 从 HTML 表中选择特定行?

javascript - 同时突出显示多个输入字段中的单词

c# - 使用 Regex.Matches 计算字符串中的特定单词时出错

javascript - 禁用属性不会更改 Google Chrome 中的颜色

html - 为 IE8 使用媒体 ="print"

jquery - IE7/IE8 与 JQuery 交互 .removeAttr ('disabled' ), 不应用 css

jquery - 如何在 symfony2 中接收 JSON

jquery - 以编程方式切换 Bootstrap 3 导航栏

javascript - 带有反斜杠和某些字符的正则表达式

java - Kotlin split with regex 工作不如预期