Nil*_*hal 1 regex jquery internet-explorer
我已经写了一堆代码,对支出金额(有效条目32.4554,234,324.34等等).我还编写了代码来限制用户输入超过13位数(不包括.和,).
所有这些在Firefox中完美运行.但是在IE 8中,在数字位数超过13之后,如果输入了一个字母,Internet Explorer就会挂起并崩溃!调试时我注意到它在正则表达式线上出错,但同样的正则表达式工作正常,直到没有超过13的限制!Regexperts,拜托!给我看灯!
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;
});
Run Code Online (Sandbox Code Playgroud)
我很确定这是一个灾难性的回溯案例.你的正则表达式有太多的可能性来检查,直到它失败.
问题在于这一部分
([1-9]*[0-9]*,?[0-9]*)*
Run Code Online (Sandbox Code Playgroud)
而且我很确定它没有按照你的期望做到.
这将匹配相同的东西,但会更快失败:
/^[1-9]*[0-9,]*(\.[0-9]+)?$/
Run Code Online (Sandbox Code Playgroud)
它仍然允许像1 ,,,,,,,.123这样的东西,但比你的好多了.如果您想禁止此类事情,您需要澄清您的要求.