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?

4voto

Emrah Tuncel Punkte 580

Auf diese Weise funktioniert es für mich.

function isNumeric(num){
    let value1 = num.toString();
    let value2 = parseFloat(num).toString();
    return (value1 === value2);
}

console.log(
    isNumeric(123),     //true
    isNumeric(-123),    //true
    isNumeric('123'),   //true
    isNumeric('-123'),  //true
    isNumeric(12.2),    //true
    isNumeric(-12.2),   //true
    isNumeric('12.2'),  //true
    isNumeric('-12.2'), //true
    isNumeric('a123'),  //false
    isNumeric('123a'),  //false
    isNumeric(' 123'),  //false
    isNumeric('123 '),  //false
    isNumeric('a12.2'), //false
    isNumeric('12.2a'), //false
    isNumeric(' 12.2'), //false
    isNumeric('12.2 '), //false
)

4voto

Siubear Punkte 147

Zitat:

isNaN(num) // gibt true zurück, wenn die Variable KEINE gültige Zahl enthält

ist nicht ganz richtig, wenn Sie auf führende/nachlaufende Leerzeichen prüfen müssen - zum Beispiel, wenn eine bestimmte Anzahl von Ziffern erforderlich ist und Sie z.B. für eine PIN-Eingabe '1111' und nicht ' 111' oder '111' erhalten müssen.

Besser zu verwenden:

var num = /^\d+$/.test(num)

3voto

vitoboski Punkte 145

Überprüfung der Zahl in JS:

  1. Der beste Weg, um zu prüfen, ob es sich um eine Nummer handelt:

    isFinite(20)
    //True
  2. Lesen eines Wertes aus einer Zeichenkette. CSS *:

    parseInt('2.5rem')
    //2
    parseFloat('2.5rem')
    //2.5  
  3. Für eine ganze Zahl:

    isInteger(23 / 0)
    //False
  4. Wenn der Wert NaN ist:

    isNaN(20)
    //False

3voto

Travis Parks Punkte 8025

Ich habe kürzlich einen Artikel darüber geschrieben, wie man sicherstellen kann, dass eine Variable eine gültige Zahl ist: https://github.com/jehugaleahsa/artifacts/blob/master/2018/typescript_num_hack.md Der Artikel erklärt, wie man Fließkomma oder Integer sicherstellt, falls das wichtig ist ( +x vs ~~x ).

Der Artikel geht davon aus, dass es sich bei der Variablen um eine string oder eine number zu beginnen und trim vorhanden/ausgefüllt ist. Es wäre nicht schwer, es zu erweitern, um auch andere Typen zu behandeln. Hier ist der Kern der Sache:

// Check for a valid float
if (x == null
    || ("" + x).trim() === ""
    || isNaN(+x)) {
    return false;  // not a float
}

// Check for a valid integer
if (x == null
    || ("" + x).trim() === ""
    || ~~x !== +x) {
    return false;  // not an integer
}

3voto

gvlax Punkte 648
function isNumberCandidate(s) {
  const str = (''+ s).trim();
  if (str.length === 0) return false;
  return !isNaN(+str);
}

console.log(isNumberCandidate('1'));       // true
console.log(isNumberCandidate('a'));       // false
console.log(isNumberCandidate('000'));     // true
console.log(isNumberCandidate('1a'));      // false 
console.log(isNumberCandidate('1e'));      // false
console.log(isNumberCandidate('1e-1'));    // true
console.log(isNumberCandidate('123.3'));   // true
console.log(isNumberCandidate(''));        // false
console.log(isNumberCandidate(' '));       // false
console.log(isNumberCandidate(1));         // true
console.log(isNumberCandidate(0));         // true
console.log(isNumberCandidate(NaN));       // false
console.log(isNumberCandidate(undefined)); // false
console.log(isNumberCandidate(null));      // false
console.log(isNumberCandidate(-1));        // true
console.log(isNumberCandidate('-1'));      // true
console.log(isNumberCandidate('-1.2'));    // true
console.log(isNumberCandidate(0.0000001)); // true
console.log(isNumberCandidate('0.0000001')); // true
console.log(isNumberCandidate(Infinity));    // true
console.log(isNumberCandidate(-Infinity));    // true

console.log(isNumberCandidate('Infinity'));  // true

if (isNumberCandidate(s)) {
  // use +s as a number
  +s ...
}

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