0

数字-のみをチェックできる JavaScript 関数が必要です。

例: 1,2,3,4,5,6,7,8,9,0 は true を返し、- も true を返します。

それ以外はEnterを押しても全てfalseを返します。

私はこのような機能を持っています:

function IsNumeric(sText){
    var filter = /^[0-9-+]+$/;
    if (filter.test(sText)) {
        return true;
    }else {
        return false;
    }
}

私はそれを次のように呼びます:

if(!IsNumeric(value)) {
  alert("Number and - only please");
}

何らかの理由で機能しません。正規表現を使用せずに検証を行う方法はありますか?

4

4 に答える 4

2

編集: OK、あなたのコメントに従って更新された、単独のマイナス記号またはマイナス記号のない数字の組み合わせのいずれかに一致する式:

function IsNumeric(sText){
   return /^(-|\d+)$/.test(sText);
}

正の数のみが必要で、先行ゼロを許可したくない場合は、次の正規表現を使用します。

/^(-|[1-9]\d*)$/

「正規表現を使用せずに検証を行う方法はありますか?」という質問に関しては、はい、JS が提供するさまざまな文字列および数値操作関数を使用してこれを実現する方法は無限にあります。しかし、正規表現は最も単純です。

関数はtrue、指定された値に数字とプラス記号またはマイナス記号の任意の組み合わせ ( in などの繰り返しを含む) が含まれている場合に戻ります"---+++123"+正規表現の終わりに向かっているということは、前の文字に 1 回以上一致することを意味することに注意してください。

おそらくあなたが望むのは、先頭にプラス記号またはマイナス記号を 1 つだけ使用し、その後に任意の数字の組み合わせを使用できる正規表現です。

function IsNumeric(sText){
   return /^[-+]?\d+$/.test(sText);
}

?は、直前の文字に 0 回または 1 回一致することを意味します。のように簡略化でき[0-9]ます\d。ステートメントは必要ないことに注意してください。結果を直接if返すだけです。.test()

「-123」、「123」、「+123」は受け入れますが、「--123」は受け入れません。先頭にプラス記号を使用したくない場合は、正規表現を に変更して/^-?\d+$/ください。

「例: 1,2,3,4,5,6,7,8,9,0 は true を返し、- も true を返します。」

あなたの例は、1桁または1つのマイナス記号のみが有効と見なされると言っているようです-もしそうなら、これを試してください:

function IsNumeric(sText){
   return /^[\d-]$/.test(sText);
}

于 2012-06-19T06:39:00.497 に答える
1

Hiphen(-) には特別な意味があるため、文字セットではエスケープ文字を使用してください。

これを試して:

       var filter = /^[0-9\-]+$/;
于 2012-06-19T07:03:22.107 に答える
1

どうですか

function IsNumeric(s) {
    return /^(+|-|)\d*$/.test(s);
}
于 2012-06-19T06:46:00.230 に答える
0

簡単にできます...これを試してください:

function IsNumeric(str) {
    return str.length == 1 && (parseInt(str) < 10 || str == "-");
}
于 2012-06-19T06:34:56.307 に答える