javascript で、文字列が自然数 (0 を含む) かどうかを確認するにはどうすればよいですか?
ありがとう
例:
'0' // ok
'1' // ok
'-1' // not ok
'-1.1' // not ok
'1.1' // not ok
'abc' // not ok
javascript で、文字列が自然数 (0 を含む) かどうかを確認するにはどうすればよいですか?
ありがとう
例:
'0' // ok
'1' // ok
'-1' // not ok
'-1.1' // not ok
'1.1' // not ok
'abc' // not ok
正規表現恐怖症の場合は、次のようなことができます。
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
あなたが使用することができます
var inN = !!(+v === Math.abs(~~v) && v.length);
最後のテストにより、 が得られることが保証され''
ますfalse
。
1e14
非常に大きな数( など)では機能しないことに注意してください
regexp で int を確認できます。
var intRegex = /^\d+$/;
if(intRegex.test(someNumber)) {
alert('Natural');
}
function isNatural(num){
var intNum = parseInt(num);
var floatNum = parseFloat(num);
return (intNum == floatNum) && intNum >=0;
}
このスレッドが少し古いことは知っていますが、これまでで最も正確な解決策を見つけたと思います。
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()
したため、さらに信頼性が高くなるはずです。
用途/^\d+$/
に合わせ000
ます。したがって、/^[1-9]\d*$|^0$/
一致する正の整数を使用するか、0 が正しいでしょう。