1826 Stimmen

Wie kann ich prüfen, ob eine Zeichenkette eine gültige Zahl ist?

Ich hoffe, dass es etwas gibt, das sich im gleichen konzeptionellen Rahmen bewegt wie das alte VB6 IsNumeric() Funktion?

3voto

Rafael Punkte 79

Nun, ich benutze dieses, das ich gemacht habe...

Bisher hat es funktioniert:

function checkNumber(value) {
    return value % 1 == 0;
}

Wenn Sie ein Problem entdecken, sagen Sie es mir bitte.

3voto

The Dembinski Punkte 1400

Falls jemand jemals so weit kommt, ich habe einige Zeit damit verbracht, moment.js zu patchen ( https://github.com/moment/moment ). Hier ist etwas, das ich daraus mitgenommen habe:

function isNumeric(val) {
    var _val = +val;
    return (val !== val + 1) //infinity check
        && (_val === +val) //Cute coercion check
        && (typeof val !== 'object') //Array/object check
}

Behandelt die folgenden Fälle:

Stimmt:

isNumeric("1"))
isNumeric(1e10))
isNumeric(1E10))
isNumeric(+"6e4"))
isNumeric("1.2222"))
isNumeric("-1.2222"))
isNumeric("-1.222200000000000000"))
isNumeric("1.222200000000000000"))
isNumeric(1))
isNumeric(0))
isNumeric(-0))
isNumeric(1010010293029))
isNumeric(1.100393830000))
isNumeric(Math.LN2))
isNumeric(Math.PI))
isNumeric(5e10))

Falsch! :

isNumeric(NaN))
isNumeric(Infinity))
isNumeric(-Infinity))
isNumeric())
isNumeric(undefined))
isNumeric('[1,2,3]'))
isNumeric({a:1,b:2}))
isNumeric(null))
isNumeric([1]))
isNumeric(new Date()))

Ironischerweise ist es diejenige, mit der ich am meisten zu kämpfen habe:

isNumeric(new Number(1)) => false

Alle Vorschläge sind willkommen. :]

2voto

Predhin Punkte 51

PFB die funktionierende Lösung:

 function(check){ 
    check = check + "";
    var isNumber =   check.trim().length>0? !isNaN(check):false;
    return isNumber;
    }

2voto

lebobbi Punkte 2057

Es hängt also von den Testfällen ab, die Sie damit bearbeiten wollen.

function isNumeric(number) {
  return !isNaN(parseFloat(number)) && !isNaN(+number);
}

Was ich suchte, war regelmäßige Arten von Zahlen in Javascript. 0, 1 , -1, 1.1 , -1.1 , 1E1 , -1E1 , 1e1 , -1e1, 0.1e10, -0.1.e10 , 0xAF1 , 0o172, Math.PI, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY

Und auch sie sind Darstellungen als Strings:
'0', '1', '-1', '1.1', '-1.1', '1E1', '-1E1', '1e1', '-1e1', '0.1e10', '-0.1.e10', '0xAF1', '0o172'

Ich wollte sie auslassen und nicht als numerisch kennzeichnen '', ' ', [], {}, null, undefined, NaN

Bis heute scheinen alle anderen Antworten einen dieser Testfälle nicht bestanden zu haben.

2voto

cdeutsch Punkte 3769

Ersparen Sie sich die Suche nach einer "eingebauten" Lösung.

Es gibt keine gute Antwort, und die Antwort, die in diesem Thread am häufigsten geäußert wurde, ist falsch.

npm install is-number

In JavaScript ist es nicht immer so einfach wie es sein sollte, zuverlässig zu prüfen, ob ein Wert eine Zahl ist. Es ist üblich, dass Entwickler +, - oder Number() verwenden, um einen String-Wert in eine Zahl umzuwandeln (z. B. wenn Werte von Benutzereingaben, Regex-Matches, Parsern usw. zurückgegeben werden). Aber es gibt viele nicht-intuitive Randfälle, die zu unerwarteten Ergebnissen führen:

console.log(+[]); //=> 0
console.log(+''); //=> 0
console.log(+'   '); //=> 0
console.log(typeof NaN); //=> 'number'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X