負の値と負の値の両方を受け入れるJquery

私はこれを試しました。これは整数のみを受け入れます。私は否定的でも否定的でもありません。

    $(function() {
        $('.spinner').keyup(function() {
            if (this.value.match(/[^0-9]/g)) {
                this.value = this.value.replace(/[^0-9]/g, '');
            }
        });
    });
0
@PeterHerdenborgはい、そうすべきです。非数字を含む場合は、非数字だけを削除する必要があります。
追加された 著者 Barmar,
chromeでは、type = "number"は数字以外のものを喜んで無視します
追加された 著者 mplungjan,
ええ、申し訳ありませんが、私はそれが間違っている、なぜ私は私のコメントを削除しました。
追加された 著者 Peter Herdenborg,
$( '。spinner')というHTML要素の種類を教えてください。
追加された 著者 kidwon,

3 答え

正規表現を使い続けることもできますし、私の目にはもっと読みやすい「純粋な論理」が好きな人は、そのようなコードを使うことができます:

$('.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( "")の間に5として解析される "5a"のようなものを許可するため、 parseInt()の代わりに Number() 5a ")はNaNの値を与えます。

Live test case.

0
追加された

マッチングと置き換えの両方の必要はありません。の代わりに

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

つかいます

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

私はあなたがフィールドで1つの整数を見つけることを期待していると仮定します。

0
追加された

あなたはテストされていませんが、このような試みをしました:

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

reg-exに余分な ' - 'を追加することによって、最初のものは範囲を指定し、もう1つは実際のcharを指定することです。

あなたはまた、プロセス全体を改良して、常に値を次のように設定することもできます:一致するすべて:

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

何もしないで行の開始または - 少なくとも1つ以上の数字の連続が続きます。

0
追加された