0

私はこれを試しました。これは整数のみを受け入れます。ネガティブとノンネガティブの両方が欲しい。

    $(function () {
        $('.spinner').keyup(function () {
            if (this.value.match(/[^0-9]/g)) {
                this.value = this.value.replace(/[^0-9]/g, '');
            }
        });
    });
4

3 に答える 3

0

正規表現を使用し続けることができます。または、私の目にはより読みやすい「純粋なロジック」を好む場合は、次のようなコードを使用できます。

$('.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")

ライブ テスト ケース

于 2013-02-07T13:11:42.147 に答える
0

テストしていませんが、次のようなことを試しましたか:

$(function () {
    $('.spinner').keyup(function () {
        if (this.value.match(/[^0-9-]/g)) {
            this.value = this.value.replace(/[^0-9-]/g, '');
        }
    });
});

正規表現に追加の「-」を追加することにより、最初のものは範囲を指定し、2番目のものは実際の文字を指定します。

プロセス全体を調整して、常に値を : 一致するものすべてに設定することもできます。

^[-]{0,1}[0-9]+

行頭は何もないか、または - の後に少なくとも 1 つ以上の数字が続きます。

于 2013-02-07T12:55:47.227 に答える
0

マッチングと置換の両方を行う必要はありません。それ以外の

if (this.value.match(/[^0-9]/g)) {
    this.value = this.value.replace(/[^0-9]/g, '');
}

使用する

this.value = this.value.replace(/([+-]?\d+)/, '$1');

フィールドに整数を 1 つだけ見つけることを期待していると思います。

于 2013-02-07T13:00:39.630 に答える