在JavaScript中,如何检查一个字符串是否为自然数(包括零)?
谢谢
示例:
'0' // ok
'1' // ok
'-1' // not ok
'-1.1' // not ok
'1.1' // not ok
'abc' // not ok
在JavaScript中,如何检查一个字符串是否为自然数(包括零)?
谢谢
示例:
'0' // ok
'1' // ok
'-1' // not ok
'-1.1' // not ok
'1.1' // not ok
'abc' // not ok
这是我的解决方案:
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));
这是输出结果:
[true, true, false, false, false, false, false, false, false]
演示: http://jsfiddle.net/rlemon/zN6j3/1
注意:这不是一个真正的自然数,但我理解OP并不需要一个真正的自然数。这里是真正自然数的解决方案:
function nat(n) {
return n >= 0 && Math.floor(n) === +n;
}
n>=0 && Math.floor(n) === +n
,这就是我认为的自然数 :) 这样写很简洁,并且通过设计可以覆盖所有边缘情况。 - Benjamin Gruenbaumn2
之前你忘记了var
关键字。没有它,你会使n2
成为全局变量。 - Blender使用正则表达式
function isNaturalNumber (str) {
var pattern = /^(0|([1-9]\d*))$/;
return pattern.test(str);
}
true
或false
,因此您可以基于此进行检查。if(isNaturalNumber(number)){
// Do something if the number is natural
}else{
// Do something if it's not natural
}
这篇文章讨论了如何在JavaScript中使用XMLHttpRequest对象来获取和处理服务器返回的数据。XMLHttpRequest是一个内置对象,可以向服务器发送请求并接收响应。本文提供了一些示例代码,演示了如何使用XMLHttpRequest对象从服务器获取数据,并将其插入到网页中。此外,本文还介绍了如何使用JSON格式来处理从服务器返回的数据。
+42
、5e3
、0xFF
等内容。简而言之,数字比文本更难解析。 - Jan Turoň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
1.0
是一个整数,因此也是自然数。 - ajp152431.0
所指的对象。按照同样的定义,你会认为1.0
和1.00
是不相等的吗?一个有点相关(而且可能更强的)证明是展示0.999...=1
,这个在维基百科上有详细的文章。 - Blender您可以使用
var inN = !!(+v === Math.abs(~~v) && v.length);
''
返回false
。1e14
)。parseFloat()
和parseInt()
都可以接受字符串中数值部分后面的垃圾字符,因此parseFloat("12balloons")
返回12
。 - Pointy12balloons
不是自然数,因此我会认为该函数会返回 false
。 - Blender12balloons
也是潜在的无效输入,因为OP给出了'abc'
作为一个“不行”的例子。 - ajp15243if(num.match(/^\d+$/)){ alert(num) }
。const func = (number) => {
return Math.floor(number) === number
}
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;
}
2 == 2.0
,因此您的函数将为'2.0'
返回true
。 - Blender2.0
不是整数,因此不是自然数。 - Ian2.0
这样的数字是否被认为是实际整数,还是仅等同于一个“单独的数字实体”的整数。我想在数学界可能存在争议。也许可以在 http://math.stackexchange.com/ 上提出这个问题。 - ajp152431.0
和1
指的是同一个对象,就像0
和0.0
都指向0
一样。 - BlenderNumber() 准确解析字符串输入。("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;
}
function isNatural(n){
return Math.abs(parseInt(+n)) -n === 0;
}
对于'1 dog','-1',''或'1.1',返回false,对于非负整数或其字符串(包括'1.2345e12',但不包括'1.2345e3'),返回true。
parseInt
? Mozilla 开发者网络上的 parseInt - kush0
,有些人则不包含。 - Blender0
,但总是不包括负数。在OP的情况下,所需定义被指定为包括0
(这确实是“非负整数”)。此外,仅使用parseInt
是行不通的,因为parseInt('1.1')
将返回1
(至少在Chrome中是这样)。 - ajp152431.0
符合您的定义,是否属于自然数? - Blender