0

我用正则表达式编写了以下 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"));
} 
4

3 回答 3

1

如果您不想要正则表达式,如果您在 keyup 上执行此操作,则不需要正则表达式。只需在事件处理程序中按 keycode/which 过滤即可。您已将问题标记为 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;
});

注意我还没有真正测试过这个,但这基本上可以让用户除了数字或小数之外不能输入任何东西。请注意,他们仍然可以粘贴坏字符。我将把解决方案留给读者......

于 2012-06-07T20:22:48.197 回答
1

不要将数字作为字符串处理。

isNumberValid = function(n) {
    return (n == Math.round(n*10000)/10000)
}
于 2012-06-07T19:26:41.917 回答
0

这是你想要的?>>

var str = "1a2..b3.C4;56";
str = str.replace(/[^0-9\.]/g,"").replace(/\./,",").replace(/\./g,"").replace(/,/,"."); 
print(str);

在http://ideone.com/F7wWV进行现场测试

于 2012-06-07T23:03:36.810 回答