14

在javascript中,如何检查字符串是否为自然数(包括零)?

谢谢

例子:

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

14 回答 14

25

这是我的解决方案:

function isNaturalNumber(n) {
    n = n.toString(); // force the value incase it is not
    var n1 = Math.abs(n),
        n2 = parseInt(n, 10);
    return !isNaN(n1) && n2 === n1 && n1.toString() === n;
}

这是演示:

var tests = [
        '0',
        '1',
        '-1',
        '-1.1',
        '1.1',
        '12abc123',
        '+42',
        '0xFF',
        '5e3'
    ];

function isNaturalNumber(n) {
    n = n.toString(); // force the value incase it is not
    var n1 = Math.abs(n),
        n2 = parseInt(n, 10);
    return !isNaN(n1) && n2 === n1 && n1.toString() === n;
}

console.log(tests.map(isNaturalNumber));

这是输出:

【真、真、假、假、假、假、假、假、假】

演示:http: //jsfiddle.net/rlemon/zN6j3/1

注意:这不是一个真正的自然数,但是我知道 OP 不想要一个真正的自然数。这是实数自然数的解决方案:

function nat(n) {
    return n >= 0 && Math.floor(n) === +n;
}

http://jsfiddle.net/KJcKJ/

@BenjaminGruenbaum提供

于 2013-05-28T19:19:54.003 回答
9

使用正则表达式

function isNaturalNumber (str) {
    var pattern = /^(0|([1-9]\d*))$/;
    return pattern.test(str);
}

该函数将返回一个truefalse因此您可以根据它进行检查。

if(isNaturalNumber(number)){ 
   // Do something if the number is natural
}else{
   // Do something if it's not natural
}

来源:http ://www.codingforums.com/showthread.php?t=148668

于 2013-05-28T19:04:30.973 回答
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 回答
2

你可以做if(num.match(/^\d+$/)){ alert(num) }

于 2013-05-28T19:03:30.827 回答
1

您可以使用正则表达式检查 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

Number() 准确解析字符串输入。(“12basdf”是 NaN,“+42”是 42,等等)。用它来检查它是否是一个数字。从那里,只需进行几次检查以确保输入符合您的其余标准。

function isNatural(n) {
    if(/\./.test(n)) return false; //delete this line if you want n.0 to be true
    var num = Number(n);
    if(!num && num !== 0) return false;
    if(num < 0) return false;
    if(num != parseInt(num)) return false; //checks for any decimal digits
    return true;
}
于 2013-05-28T20:01:14.223 回答
1
function isNatural(n){
    return Math.abs(parseInt(+n)) -n === 0;
}

这对于“1 dog”、“-1”、“”或“1.1”返回 false,并返回 true

对于非负整数或其字符串,包括“1.2345e12”,而不是“1.2345e3”。

于 2013-05-28T20:27:27.380 回答
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

这就是我检查字符串是否为自然数(包括零!)的方式。

var str = '0' // ok
var str1 = '1' // ok
var str2 = '-1' // not ok
var str3 = '-1.1' // not ok
var str4 = '1.1' // not ok
var str5 = 'abc' // not ok

console.log("is str natural number (including zeros): ", Number.isInteger(Number(str)) && Number(str) >= 0)
console.log("is str1 natural number (including zeros): ", Number.isInteger(Number(str1)) && Number(str1) >= 0)
console.log("is str2 natural number (including zeros): ", Number.isInteger(Number(str2)) && Number(str2) >= 0)
console.log("is str3 natural number (including zeros): ", Number.isInteger(Number(str3)) && Number(str3) >= 0)
console.log("is str4 natural number (including zeros): ", Number.isInteger(Number(str4)) && Number(str4) >= 0)
console.log("is str5 natural number (including zeros): ", Number.isInteger(Number(str5)) && Number(str5) >= 0)

于 2020-08-20T06:57:03.013 回答
0

将字符串转换为数字,然后检查:

function isNatural( s ) {
  var n = +s;
  return !isNaN(n) && n >= 0 && n === Math.floor(n);
}
于 2013-05-28T19:03:32.843 回答
0
function isNatural(number){
    var regex=/^\d*$/;
    return regex.test( number );
}
于 2013-12-09T06:34:19.293 回答
-1

使用/^\d+$/会匹配000。所以使用/^[1-9]\d*$|^0$/匹配正整数或 0 将是正确的。

于 2018-08-22T04:10:43.697 回答