Wie kann ich überprüfen, ob eine Zeichenfolge eine gültige Zahl ist?

Lesezeit: 7 Minuten

Wie kann ich uberprufen ob eine Zeichenfolge eine gultige Zahl
Elektronen_Ahoi

Ich hoffe, es gibt etwas im selben konzeptionellen Raum wie das alte VB6 IsNumeric() Funktion?

  • Siehe diese verwandte Frage, die ich vor einiger Zeit gestellt habe.

    – Michael Haren

    6. Oktober 2008 um 19:17 Uhr


  • Wenn Sie zu dieser Frage gehen, versuchen Sie, alle RegEx-Antworten zu überspringen. Das ist einfach NICHT der Weg, es zu tun.

    – Joel Coehoorn

    6. Oktober 2008 um 19:20 Uhr

  • Es sei denn, man möchte genau das tun: Zu prüfen, ob eine gegebene Zeichenkette das Format eines gültigen Zahlenstroms hat. Warum sollte es dann falsch sein?

    – SasQ

    18. Mai 2014 um 23:53 Uhr

  • Die ausgewählte Antwort ist falsch!!! Siehe seine Kommentare, aber im Grunde schlägt es mit zB fehl isNaN(""), isNaN(" "), isNaN(false)usw. Es kehrt zurück false für diese, was bedeutet, dass es sich um Zahlen handelt.

    – Andreas

    5. Oktober 2017 um 20:42 Uhr

  • Die ausgewählte Antwort ist also falsch, Regexp ist auch nicht der Weg, dies zu tun. Welche ist denn richtig?

    – Virus

    9. Mai 2020 um 8:10 Uhr

1647278710 704 Wie kann ich uberprufen ob eine Zeichenfolge eine gultige Zahl
Gavin

Wenn Sie nur versuchen zu überprüfen, ob eine Zeichenfolge eine ganze Zahl ist (keine Dezimalstellen), ist Regex eine gute Möglichkeit. Andere Methoden wie z isNaN sind zu kompliziert für etwas so Einfaches.

function isNumeric(value) {
    return /^-?\d+$/.test(value);
}

console.log(isNumeric('abcd'));         // false
console.log(isNumeric('123a'));         // false
console.log(isNumeric('1'));            // true
console.log(isNumeric('1234567890'));   // true
console.log(isNumeric('-23'));          // true
console.log(isNumeric(1234));           // true
console.log(isNumeric(1234n));          // true
console.log(isNumeric('123.4'));        // false
console.log(isNumeric(''));             // false
console.log(isNumeric(undefined));      // false
console.log(isNumeric(null));           // false

Nur zulassen positiv ganze Zahlen verwenden dies:

function isNumeric(value) {
    return /^\d+$/.test(value);
}

console.log(isNumeric('123'));          // true
console.log(isNumeric('-23'));          // false

  • console.log(isNumeric(‘-1’));

    – Yongnan

    13. November 2014 um 1:02 Uhr

  • console.log(isNumeric(‘2e2’));

    – Gaël Barbin

    2. März 2015 um 15:27 Uhr

  • Vielleicht benennen Sie einfach “isNumeric” in “hasOnlyDigits” um. in vielen Fällen ist das genau der Scheck, den Sie suchen.

    – gus3001

    9. Oktober 2017 um 20:39 Uhr

  • Das ist, wonach ich gesucht habe, das Äquivalent zu php ctype_digit

    – pmiguelpinto

    20. September 2019 um 11:17 Uhr

  • Etwas besser.. numerische Zeichen aus Sprachen wie Arabisch nicht zulassen /^[0-9]+$/.test(value)

    – Devin Rhode

    19. Oktober 2020 um 18:53 Uhr

  • In diesem Fall ist RegExp == schlecht

    – Joel Coehoorn

    6. Oktober 2008 um 19:27 Uhr

  • Dies schlägt bei Hexadezimalzahlen (z. B. 0x12), Gleitkommazahlen ohne führende Null (z. B. .42) und negativen Zahlen fehl.

    – Ori

    18. April 2012 um 1:25 Uhr

  • @JoelCoehoorn Möchtest du näher erläutern, warum RegExp == hier schlecht ist? Scheint mir ein gültiger Anwendungsfall zu sein.

    – Komputius

    30. Dezember 2014 um 16:02 Uhr


  • Es gibt mehr Möglichkeiten, eine Zahl zu bilden, als es scheint (Hex-Zahlen in einem anderen Kommentar sind nur ein Beispiel), und es gibt viele Zahlen, die möglicherweise nicht als gültig angesehen werden (Überlauf des Typs, zu genau usw.). Außerdem ist Regex sowohl langsamer als auch komplizierter als nur die Verwendung der eingebauten Mechanismen

    – Joel Coehoorn

    30. Dezember 2014 um 18:18 Uhr


  • sollte auch der wissenschaftlichen Notation entsprechen … 1e10 usw.

    – Josef Merdrignac

    30. Oktober 2017 um 21:45 Uhr

Wie und wo werden Anmerkungen in Java verwendet
Hamzeen Hameem

Die akzeptierte Antwort auf diese Frage weist einige Mängel auf (wie von einigen anderen Benutzern hervorgehoben). Dies ist eine der einfachsten und bewährtesten Vorgehensweisen in Javascript:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Unten sind einige gute Testfälle:

console.log(isNumeric(12345678912345678912)); // true
console.log(isNumeric('2 '));                 // true
console.log(isNumeric('-32.2 '));             // true
console.log(isNumeric(-32.2));                // true
console.log(isNumeric(undefined));            // false

// the accepted answer fails at these tests:
console.log(isNumeric(''));                   // false
console.log(isNumeric(null));                 // false
console.log(isNumeric([]));                   // false

  • parseFloat ist für diese Anwendung nicht ausreichend, da es eine bisher geparste gültige Zahl zurückgibt, wenn es auf das erste Zeichen stößt, das nicht als Zahl geparst werden kann. z.B. parseFloat('1.1ea10') === 1.1.

    – Ben Aston

    2. Oktober 2020 um 10:35 Uhr

  • Vorsicht, wenn Sie Number.isNan und Number.isFinite verwenden, funktioniert dies nicht.

    – Yohan Dahmani

    2. Juli 2021 um 13:54 Uhr

  • Für Saiten Number.isNaN und Number.isFinite wird nicht funktionieren, weil sie die Zeichenfolge nicht in eine Zahl umwandeln.

    – Kas

    27. Juli 2021 um 8:49 Uhr

1647278711 771 Wie kann ich uberprufen ob eine Zeichenfolge eine gultige Zahl
Michael

Wenn Sie wirklich sicherstellen möchten, dass ein String nur eine Zahl, eine beliebige Zahl (Ganzzahl oder Fließkommazahl) und genau eine Zahl enthält, können Sie kann nicht verwenden parseInt()/ parseFloat(), Number()oder !isNaN() selbst. Beachten Sie, dass !isNaN() kehrt tatsächlich zurück true wann Number() würde eine Zahl zurückgeben, und false wann es wiederkommen würde NaNalso schließe ich es aus dem Rest der Diskussion aus.

Das Problem mit parseFloat() ist, dass es eine Zahl zurückgibt, wenn die Zeichenfolge eine beliebige Zahl enthält, auch wenn die Zeichenfolge keine enthält nur und exakt eine Zahl:

parseFloat("2016-12-31")  // returns 2016
parseFloat("1-1") // return 1
parseFloat("1.2.3") // returns 1.2

Das Problem mit Number() ist, dass es eine Zahl zurückgibt, wenn der übergebene Wert überhaupt keine Zahl ist!

Number("") // returns 0
Number(" ") // returns 0
Number(" \u00A0   \t\n\r") // returns 0

Das Problem beim Rollen Ihrer eigenen Regex besteht darin, dass Sie Fälle übersehen oder Fälle erkennen, in denen Sie dies nicht tun sollten, es sei denn, Sie erstellen die exakte Regex für den Abgleich einer Gleitkommazahl, da Javascript sie erkennt. Und selbst wenn Sie Ihre eigene Regex erstellen können, warum? Es gibt einfachere integrierte Möglichkeiten, dies zu tun.

Es stellt sich jedoch heraus Number() (und isNaN()) macht für jeden Fall das Richtige parseFloat() gibt eine Zahl zurück, wenn dies nicht der Fall sein sollte, und umgekehrt. Um also herauszufinden, ob ein String wirklich genau und nur eine Zahl ist, rufe beide Funktionen auf und schaue, ob sie es sind beide Rückgabe wahr:

function isNumber(str) {
  if (typeof str != "string") return false // we only process strings!
  // could also coerce to string: str = ""+str
  return !isNaN(str) && !isNaN(parseFloat(str))
}

  • parseFloat ist für diese Anwendung nicht ausreichend, da es eine bisher geparste gültige Zahl zurückgibt, wenn es auf das erste Zeichen stößt, das nicht als Zahl geparst werden kann. z.B. parseFloat('1.1ea10') === 1.1.

    – Ben Aston

    2. Oktober 2020 um 10:35 Uhr

  • Vorsicht, wenn Sie Number.isNan und Number.isFinite verwenden, funktioniert dies nicht.

    – Yohan Dahmani

    2. Juli 2021 um 13:54 Uhr

  • Für Saiten Number.isNaN und Number.isFinite wird nicht funktionieren, weil sie die Zeichenfolge nicht in eine Zahl umwandeln.

    – Kas

    27. Juli 2021 um 8:49 Uhr

Wie kann ich uberprufen ob eine Zeichenfolge eine gultige Zahl
Tanguy_k

Versuchen Sie die isNan-Funktion:

Die Funktion isNaN() ermittelt, ob ein Wert eine unzulässige Zahl (Not-a-Number) ist.

Diese Funktion gibt wahr zurück, wenn der Wert gleich NaN ist. Andernfalls wird false zurückgegeben.

Diese Funktion unterscheidet sich von der Nummernspezifischen Zahl.istNaN() Methode.

Die globale Funktion isNaN() wandelt den getesteten Wert in eine Zahl um und testet ihn dann.

Number.isNan() wandelt die Werte nicht in eine Zahl um und gibt für keinen Wert, der nicht vom Typ Zahl ist, „true“ zurück.

  • Stellen Sie sicher, dass Sie ein Häkchen für die leere Zeichenfolge hinzufügen. isNaN(”) gibt false zurück, aber in diesem Fall möchten Sie wahrscheinlich, dass es true zurückgibt.

    – Michael Haren

    6. Oktober 2008 um 19:44 Uhr

  • isFinite ist ein besserer Check – es befasst sich mit dem seltsamen Eckfall Infinity

    – JonnyRaa

    20. Januar 2015 um 12:02 Uhr

  • @MichaelHaren Nicht gut genug! isNaN() kehrt zurück false zum IRGENDEIN Zeichenfolge, die nur Leerzeichen enthält, einschließlich Dinge wie ‘\u00A0’.

    – Michael

    2. März 2016 um 22:13 Uhr


  • WARNUNG: Funktioniert nicht für die Werte: null, “” (leere Zeichenfolge) und falsch.

    – Krisztián Balla

    27. Juli 2017 um 8:02 Uhr

  • Mir ist klar, dass diese Antwort vor 11 Jahren und ein paar Minuten vor der akzeptierten Antwort gegeben wurde, aber ob Sie es mögen oder nicht, die akzeptierte Antwort hat viel mehr Konversation, daher trägt diese Antwort nicht wirklich zur Beantwortung der Frage bei. Ich würde freundlicherweise vorschlagen, es zu löschen, um neue Leser nicht abzulenken. Ich denke auch, dass Sie das Diszipliniert-Abzeichen bekommen, wenn Sie das tun.

    – Dan Dascalescu

    6. Oktober 2019 um 6:15 Uhr

1002530cookie-checkWie kann ich überprüfen, ob eine Zeichenfolge eine gültige Zahl ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy