Thorsten: parseFloat(element.value.replace

Hallo,

ich möchte einen Wert, der eingeben wird überprüfen, es sollen nur Zahlen übernommen werden, alles andere soll gelöscht werden. Hier hier im Forum fand ich in einem Beitrag:

let zahl = parseFloat(element.value.replace(/[^0-9 ]/g, "") )

Wenn ich es aber richtig verstehe, behandelt parseFloat die Zahl sowieso schon so, außer bei anderen Zeichen vor der Zahl

So müsste

let zahl = parseFloat(element.value)

alleine richtig rechnen

€30 geht .... nicht aber 30€, so kann man sich doch das replace sparen

  1. Hallo,

    let zahl = parseFloat(element.value)

    patseFloat liefert eine Zahl, wenn sie am Anfang steht,

    • 50€ -> 50
    • €50 -> NaN

    wenn die Einheit vor der Zahl steht, musst du die Eingabe behandeln.

    Beachte: parseFloat parsed nach Fließkommazahlen mit Dezimalpunkt

    • 55.5 -> 55.5
    • 55,5 -> 55

    Kennst du schon <input type="number">?

    Warum steht die Einheit im Element und nicht davor/dahinter?

    Gruß
    Jürgen

  2. @@Thorsten

    ich möchte einen Wert, der eingeben wird überprüfen, es sollen nur Zahlen übernommen werden, alles andere soll gelöscht werden.

    Wenn du ein Eingabefeld für Zahlen willst, dann verwende den entsprechenden Typen: <input type="number"/>

    Dann steht dir auch valueAsNumber zur Verfügung, was eine Zahl zurückgibt.

    (Um die serverseitige Prüfung der eingegebenen Daten kommst du sowieso nicht drumrum.)

    let zahl = parseFloat(element.value.replace(/[^0-9 ]/g, "") )

    Das macht keinen Sinn, nur Ziffern und Leerzeichen zuzulssen und dann nach Fließkommazahlen zu parsen.

    Für was für Daten soll das Eingabefeld gut sein?

    😷 LLAP

    --
    “When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.” —John Lennon
  3. Hallo Thorsten,

    parseInt und parseFloat stellen die Arbeit ein, sobald sie ein Zeichen finden, das sie nicht mehr verarbeiten können. Führende Leerstellen werden übersprungen. Wenn die Arbeit eingestellt wurde, bevor ein Zeichen verarbeitet werden konnte, ist das Ergebnis NaN.

    Nicht jedes Zeichen ist an jeder Position erlaubt. D.h. eine einfache Regex, die Ziffern und Spaces zulässt, reicht nicht hin. parseFloat(" 12 3") würde 12 liefern.

    Rolf

    --
    sumpsi - posui - obstruxi