我已经尝试过这段代码,但我想我的正则表达式有错误,因为它总是true
。
除了正则表达式之外,我还遇到keypress
的问题,因为我在添加新char之前测试了值,我不想使用keyup
因为我不知道在哪里添加了最后一个字符(用户不会总是在输入字段的末尾输入字符。)
我很感激一个很好的解决方案,谢谢。
$('.myInputField').keypress(function(){
var val = $(this).val();
var regexTest = /^[0-9]{0,8}[.][0-9]{0,2}|[0-9]{0,8}$/;
var ok = regexTest.test(val);
if(ok)
return true;
else
return false;
答案 0 :(得分:0)
我想你可能想要这样的正则表达式:
/^\d{0,8}(\.\d{0,2})?$/
您使用的是.
而不是\.
,但.
会匹配任何字符。
靠近末尾的?
允许您拥有“.12”或没有。
\d
是限制数字的捷径。
请考虑不使用keypress
- keyup
(更好)或change
(最佳)是其他选择。
如果您需要“响应极快”的反馈(不能只使用change
),请考虑做这样的事情(请使用比我在示例中使用的简单CSS更好的方法):
$('.myInputField').keyup(function(e){
var val = $(this).val();
var regexTest = /^\d{0,8}(\.\d{1,2})?$/;
var ok = regexTest.test(val);
if(ok) {
$(this).css('background-color', 'green');
} else {
$(this).css('background-color', 'red');
}
});
注意:我还更改了代码,以便在输入中输入.
时,我们希望您在小数点后面加上至少一位。如果您确实不想进行此修改,请将\d{1,2}
更改为\d{0,2}