我试过这个。这只接受整数。我想要消极的和非消极的。
$(function () {
$('.spinner').keyup(function () {
if (this.value.match(/[^0-9]/g)) {
this.value = this.value.replace(/[^0-9]/g, '');
}
});
});
我试过这个。这只接受整数。我想要消极的和非消极的。
$(function () {
$('.spinner').keyup(function () {
if (this.value.match(/[^0-9]/g)) {
this.value = this.value.replace(/[^0-9]/g, '');
}
});
});
无需匹配和替换。代替
if (this.value.match(/[^0-9]/g)) {
this.value = this.value.replace(/[^0-9]/g, '');
}
利用
this.value = this.value.replace(/([+-]?\d+)/, '$1');
我假设您只希望在该字段中找到一个整数。
还没有测试,但你有没有尝试过这样的事情:
$(function () {
$('.spinner').keyup(function () {
if (this.value.match(/[^0-9-]/g)) {
this.value = this.value.replace(/[^0-9-]/g, '');
}
});
});
通过在正则表达式中添加额外的“-”:第一个是指定一个范围,第二个是实际的字符。
您还可以优化整个过程并始终将值设置为:匹配的所有内容:
^[-]{0,1}[0-9]+
行的开头没有或 - 后跟连续的数字,至少一个或多个。
您可以继续使用正则表达式,或者如果您更喜欢在我看来更具可读性的“纯逻辑”,您可以使用这样的代码:
$('.spinner').keyup(function (evt) {
var previousValue = $(this).data("prev") || "";
var currentValue = this.value;
var valid = true;
if (currentValue.length > 0 && currentValue !== "-") {
//having something we can check:
var number = Number(currentValue);
//integer only if not NaN and integer value equals
valid = (!isNaN(number) && parseInt(number, 10) == number);
}
if (valid) {
$(this).data("prev", currentValue);
} else {
//restore last good value:
this.value = (previousValue.length == 0) ? "" : parseInt(previousValue, 10);
}
});
这将每次检查该值是否为有效整数,如果无效,则恢复通过验证的先前值。
Number()
注意代替的用法parseInt()
,这是因为后面允许像“5a”这样被解析为5的东西,而Number("5a")
会给出NaN值。