允许同时将Integer
和Decimal
作为输入。并限制总长度不应大于11(包括小数点的最大输入长度)
例如。允许的值是
1.0,1.123546,12345678912,12.12345678,...等。
即如果值包含Decimal
点,则在digit
点之后允许至少一个Decimal
,否则允许具有最大长度的完整整数,即11
我已将正则表达式声明为:
/^-?(([0-9]{0,11}) | ([0-9]{0,9}.[0-9]{1,2}))$/
我正在测试的值为:6666666.666
但结果总是无法匹配。
注意:如果小数点前的数字长度为7,则小数点后允许3位数,以防最大允许长度为11。
Fractional
部分长度根据integral
部分确定。
------------------------ JQuery Function --------------------- --------------
function Validate(sender, precision)
{
var variable;
if (precision != "0")
{
var valueLength = sender.value.indexOf('.');
if (sender.id.indexOf("Longitude") > -1)
variable = "-?[0-9,]{0," + parseInt($(sender).attr("data-length") - (parseInt(precision) + 1)) + "}[.][0-9]{0," + parseInt(precision) + "}$";
else
variable = "-?(([0-9]{0," + parseInt($(sender).attr("data-length")) + "})|([0-9]{0," + parseInt($(sender).attr("data-length") - 2) + "}.[0-9]{1," + parseInt
($(sender).attr("data-length") - (valueLength + 2)) + "}))$";
}
else
variable = "-?[0-9,]{0," + parseInt($(sender).attr("data-length")) + "}$";
var re = new RegExp('^' + variable);
if (sender.value != "")
{
if (!re.test(sender.value))
{
alert('Not Matched');
}
else
{
alert('Matched');
}
}
}
答案 0 :(得分:2)
首先,.
是正则表达式中的一个特殊字符,匹配 任何 字符,因此您的表达式匹配的次数超出了您的预期。
更重要的是,您明确地在小数点前查找{0,9}
个字符,在{0,2}
后明确查找,6666666.666
给出的示例的小数位数超过两位。
为什么不简单
if (/^[0-9]+(\.[0-9]+)?$/.test( sender.value ) && sender.value.length <= 11) ...
让正则表达式担心数字和格式并分别处理长度。长度 easy 可以检查而不会出现正则表达式变化。
答案 1 :(得分:1)