我想限制用户输入特定范围内的值。所以我使用JQuery 1.7.1
编写了以下代码var reg = /^[0-9]{1,4}[.]{0,1}[0-9]{0,2}$/g;
$("#txt" + filterID).bind('keypress', function (e) {
var nn = $("#txtValues");
var strValue = nn[0].value.toString();
strValue = $.trim(strValue);
var bool = reg.test(strValue);
if (strValue.length == 0 && !((e.which < 48 || e.which > 57) && e.which != 46 && e.which != 8 && e.which != 0)) {
return true;
}
else if (bool) {
return true;
}
else {
e.preventDefault();
}
});
当我测试输入框时,它没有按预期工作。它应该允许小数点后2位数的浮点数。有些格式是
1
1.
1.0
0
1.20
0.0
1.23
123.43
1234.12
我不确定,我做错了什么。在认识到1.它失败了。任何人都可以帮我确定问题吗?
答案 0 :(得分:2)
在值更新之前触发keypress
事件。使用以下代码,使用event.which
方法将String.fromCharCode
属性转换为字符。
不可打印的击键将生成零event.which
,这肯定不是数字或点。
对于RegExp,你必须在点后面对表达式进行分组,并添加一个问号,说“让这个组匹配为可选”。
var reg = /^[0-9]{1,4}(\.[0-9]{0,2})?$/;
$("#txt" + filterID).bind('keypress', function (e) {
var nn = $("#txtValues");
var strValue = nn[0].value.toString() + String.fromCharCode(e.which);
strValue = $.trim(strValue);
var bool = reg.test(strValue);
if (bool) {
return true;
}
else {
e.preventDefault();
}
});
该模式将匹配以下内容:
1
1234
1234.5
But not:
1235. (Change {0,2} to {1,2} if you want to reject this match)
123456
1234.567
答案 1 :(得分:0)
表达式{0,1}
和{0,2}
中的区间运算符允许组重复0到1或0到2次,这允许十进制数和整数。您还应指定文字点\.
而不是仅匹配任何字符的点。
如果要在小数点后强制使用2位数字,请尝试将间隔限制为{2}并将其与点一起捆绑到一个组中,例如
/^[0-9]{1,4}(\.{1}[0-9]{2})$/