我用regexp编写了以下js。它按预期工作,但我希望简化它。有人可以帮帮我吗?
.12345 - 成功
0.12345 - 成功
12345.12345 - 成功
0.123456 失败 - 我希望这是动态的,不限于5
1.123.45 失败
1 .. 失败
.. 失败
abc - 失败
function clearNonNumericChars(field) {
field.val(field.val().replace(/([^0-9\.])/g,""));
field.val(field.val().replace(/^(\d*\.[0-9]{5})\d+$/g,"$1"));
field.val(field.val().replace(/(\.\d*)(\.)$/g,"$1"));
}
答案 0 :(得分:1)
不要将数字作为字符串处理。
isNumberValid = function(n) {
return (n == Math.round(n*10000)/10000)
}
答案 1 :(得分:1)
如果您不想要一个正则表达式,如果您在keyup上执行此操作,则不需要正则表达式。只需按事件处理程序中的keycode /进行过滤。你已经标记了jQuery的问题,所以:
$('input').on('keyup', function (e) {
if ($.inArray(e.which, [48,49,50,51,52,53,54,55,56,57,190]) === -1) {
return true;
}
return false;
});
注意我还没有真正测试过这个,但这基本上使得用户不能输入除数字或小数之外的任何内容。请注意,他们仍然可以粘贴不良字符。我会将解决方案留给读者...
答案 2 :(得分:0)
这是你在找什么? >>
var str = "1a2..b3.C4;56";
str = str.replace(/[^0-9\.]/g,"").replace(/\./,",").replace(/\./g,"").replace(/,/,".");
print(str);
的实时测试