簡體   English   中英

如何檢查字符串是否為自然數?

[英]How to check if a string is a natural number?

在 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));

這是輸出:

[真、真、假、假、假、假、假、假、假]

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

注意:這不是一個真正的自然數,但是我明白 OP 不想要一個真正的自然數。 下面是實數自然數的解:

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

http://jsfiddle.net/KJcKJ/

@BenjaminGruenbaum提供

使用正則表達式

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

如果你有正則表達式恐懼症,你可以這樣做:

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

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

您可以使用正則表達式檢查 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;
}

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;
}
function isNatural(n){
    return Math.abs(parseInt(+n)) -n === 0;
}

對於 '1 dog'、'-1'、'' 或 '1.1',這將返回 false,並返回 true

對於非負整數或其字符串,包括“1.2345e12”,而不是“1.2345e3”。

我知道這個線程有點舊,但我相信我已經找到了迄今為​​止最准確的解決方案:

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()以減少對鴨子類型的依賴,因此應該更可靠。

const func = (number) => {
    return Math.floor(number) === number
}

將字符串轉換為數字,然后檢查:

function isNatural( s ) {
  var n = +s;
  return !isNaN(n) && n >= 0 && n === Math.floor(n);
}
function isNatural(number){
    var regex=/^\d*$/;
    return regex.test( number );
}

這就是我檢查字符串是否為自然數(包括零)的方式。

 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)

function isNatural(n) {
 return Number(n) >= 0 && Number(n) % 1 === 0;
}

為什么不簡單地使用模數呢? 如果(num % 1;== 0)返回 false;

使用/^\\d+$/將匹配000 所以使用/^[1-9]\\d*$|^0$/匹配正整數或 0 將是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM