在仅数字输入字段中限制零

这是我的代码,它只允许输入数字。 如何限制输入零(0)作为第一个数字?

$('.btn').keypress(function(e) { var code = e.which; if(($(this).val().indexOf(".") == -1 && code == 46) || (code >= 48 && code = 48 && code <= 57)){ return true; } return false; }) .bind('paste',function(e) { e.preventDefault(); }); 

做这样的工作需要相当多的高级JavaScript。

首先,您需要知道光标/插入符号是否在位置0.要做到这一点,您需要获得选择范围。 这取决于您使用的浏览器。

https://developer.mozilla.org/en-US/docs/Web/API/Range

Firefox和SeaMonkey的代码段(未经测试):

 var range = document.createRange(); var pos = range.startOffset; 

然后,如果pos为零,您知道光标位于开头,您可以测试用户是否按下零:

 if(pos == 0 && code == 48) { e.preventDefault(); } 

但是,您还想要考虑用户输入100并将其光标或选择包括在1或10中的情况。现在他点击删除,剩下的是一个零(0)。 如何处理这种情况很大程度上取决于你真正想要在UI中提供什么。 我似乎真的很烦人的系统,会自动删除其余的文本,因为它与有效的答案不匹配,没有给你一个解决方法…我相信这不是一个好的解决方案。

我通常做的另一个解决方案是让用户输入字段中的任何内容(在您的情况下,仅允许数字,但任何随机数),然后当用户单击“提交”时,您validation格式。 如果格式错误,请解决错误。 在那种情况下,关于马克思正则表达式的评论适用得很好(虽然他在评论中没有解释任何内容,但是他很伤心)。

试试这个样本

 $('#numeric').bind('keypress', function (event) { var regex = new RegExp("^[1-9\b]+$"); var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); if (!regex.test(key)) { event.preventDefault(); return false; } });