正規表現を使用し続けることができます。または、私の目にはより読みやすい「純粋なロジック」を好む場合は、次のようなコードを使用できます。
$('.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()
の代わりに を使用していることに注意してください。これは、NaN 値を与えるparseInt()
一方で、5 として解析される "5a" のようなものを後で許可するためです。Number("5a")
ライブ テスト ケース。