我正在创建一个网页,其中我有一个输入文本字段,其中我只允许数字字符,如(0,1,2,3,4,5 ... 9)0-9。
我怎么能用 jQuery 做到这一点?
注意:这是一个更新的答案。下面的评论是指使用密钥代码搞乱的旧版本。
下面脚本中的inputFilter
插件允许您在文本<input>
上使用任何类型的输入过滤器,包括各种数字过滤器。这将正确处理自 IE 9 以来的复制 + 粘贴,拖放,键盘快捷键,上下文菜单操作,不可键入的键,光标位置,所有键盘布局和所有浏览器 。 请注意,您仍然必须进行服务器端验证!
在 JSFiddle 上自己尝试一下。
// Restricts input for each element in the set of matched elements to the given inputFilter.
(function($) {
$.fn.inputFilter = function(inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
}
});
};
}(jQuery));
用法:
// Restrict input to digits by using a regular expression filter.
$("#myTextBox").inputFilter(function(value) {
return /^\d*$/.test(value);
});
您可能想要使用的一些输入过滤器:
/^-?\d*$/.test(value)
/^\d*$/.test(value)
/^\d*$/.test(value) && (value === "" || parseInt(value) <= 500)
.
和,
作为小数分隔符): /^-?\d*[.,]?\d*$/.test(value)
/^-?\d*[.,]?\d{0,2}$/.test(value)
/^[0-9a-f]*$/i.test(value)
实际上并不需要 jQuery,你也可以用纯 JavaScript 做同样的事情。请参阅此答案或在 JSFiddle 上自行尝试。
HTML 5 具有<input type="number">
的本机解决方案(请参阅规范 ),但请注意浏览器支持各不相同:
step
, min
和max
属性。 e
和E
另见这个问题 。 在 w3schools.com 上亲自尝试一下。
如果你想做一些其他验证的点点滴滴,这可能很方便:
这是我使用的功能:
// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
return this.each(function()
{
$(this).keydown(function(e)
{
var key = e.charCode || e.keyCode || 0;
// allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
// home, end, period, and numpad decimal
return (
key == 8 ||
key == 9 ||
key == 13 ||
key == 46 ||
key == 110 ||
key == 190 ||
(key >= 35 && key <= 40) ||
(key >= 48 && key <= 57) ||
(key >= 96 && key <= 105));
});
});
};
然后,您可以执行以下操作将其附加到您的控件:
$("#yourTextBoxName").ForceNumericOnly();
排队:
<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">
不引人注目的风格(使用 jQuery):
$('input[name="number"]').keyup(function(e)
{
if (/\D/g.test(this.value))
{
// Filter non-digits from input value.
this.value = this.value.replace(/\D/g, '');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">