14

javascript で、文字列が自然数 (0 を含む) かどうかを確認するにはどうすればよいですか?

ありがとう

例:

'0' // ok
'1' // ok
'-1' // not ok
'-1.1' // not ok
'1.1' // not ok
'abc' // not ok
4

14 に答える 14

6

正規表現恐怖症の場合は、次のようなことができます。

function is_natural(s) {
    var n = parseInt(s, 10);

    return n >= 0 && n.toString() === s;
}

そしていくつかのテスト:

> is_natural('2')
true
> is_natural('2x')
false
> is_natural('2.0')
false
> is_natural('NaN')
false
> is_natural('0')
true
> is_natural(' 2')
false
于 2013-05-28T19:06:24.397 に答える
2

あなたが使用することができます

var inN = !!(+v === Math.abs(~~v) && v.length);

最後のテストにより、 が得られることが保証され''ますfalse

1e14非常に大きな数( など)では機能しないことに注意してください

于 2013-05-28T19:03:15.173 に答える
1

regexp で int を確認できます。

var intRegex = /^\d+$/;
if(intRegex.test(someNumber)) {
alert('Natural');
}
于 2013-05-28T19:08:49.387 に答える
1
function isNatural(num){
    var intNum = parseInt(num);
    var floatNum = parseFloat(num);
    return (intNum == floatNum) && intNum >=0;
}
于 2013-05-28T19:11:53.917 に答える
1

このスレッドが少し古いことは知っていますが、これまでで最も正確な解決策を見つけたと思います。

function isNat(n) {                // A natural number is...
  return n != null                 // ...a defined value,
      && n >= 0                    // ...nonnegative,
      && n != Infinity             // ...finite,
      && typeof n !== 'boolean'    // ...not a boolean,
      && !(n instanceof Array)     // ...not an array,
      && !(n instanceof Date)      // ...not a date,
      && Math.floor(n) === +n;     // ...and whole.
}

私の解決策は基本的に、@BenjaminGruenbaum による貢献の進化です。

正確さの私の主張を裏付けるために、@rlemon が作成したテストを大幅に拡張し、私自身のものを含むすべての提案されたソリューションをテストしました。

http://jsfiddle.net/icylace/qY3FS/1/

予想どおり、一部のソリューションは他のソリューションよりも正確ですが、すべてのテストに合格したのは私のソリューションだけです。

編集:ダックタイピングへの依存を減らすよう に更新isNat()したため、さらに信頼性が高くなるはずです。

于 2014-07-27T04:49:33.517 に答える
-1

用途/^\d+$/に合わせ000ます。したがって、/^[1-9]\d*$|^0$/一致する正の整数を使用するか、0 が正しいでしょう。

于 2018-08-22T04:10:43.697 に答える