Ankündigung

Einklappen
Keine Ankündigung bisher.

RegEx für Zahlen mit Tausendertrennpunkten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • RegEx für Zahlen mit Tausendertrennpunkten

    Hallo.

    Ich habe im Internet folgenden Code gefunden:

    PHP-Code:
    /**
    * Gibt einen für MySQL gültigen float zurück
    *
    * @param string $str_zahl
    * @return float
    */
    function float($str_zahl)
    {
    if(
    preg_match('/([0-9\.,-]+)/'$str_zahl$array_treffer))
    {
    // Zahl gefunden also können wir weitermachen
    $str_zahl $array_treffer[0];

    if(
    preg_match('/^[0-9.-\s]*[\,]{1}[0-9-]{0,2}$/'$str_zahl))
    {
    // Komma als Dezimal Separator
    // Alle Punkte entfernen und anschließend das Komma in einen
    //Punkt umwandeln
    $str_zahl str_replace(' ', , $str_zahl);
    $str_zahl str_replace('.', , $str_zahl);
    $str_zahl str_replace(',''.'$str_zahl);
    return 
    floatval($str_zahl);
    }
    elseif(
    preg_match('/^[0-9,-\s]*[\.]{1}[0-9-]{0,2}$/'$str_zahl))
    {
    // Punkt als Dezimal Separator
    // Alle Kommata entfernen
    $str_zahl str_replace(' ', , $str_zahl);
    $str_zahl str_replace(',', , $str_zahl);
    return 
    floatval($str_zahl);
    }
    elseif (
    preg_match('/^[0-9.-\s]*[\.]{1}[0-9-]{0,3}$/'$str_zahl))
    {
    // Es gibt nur Tausender Separatoren
    // Alle Punkte enfernen
    $str_zahl str_replace(' ', , $str_zahl);
    $str_zahl str_replace('.', , $str_zahl);
    return 
    floatval($str_zahl);
    }
    elseif (
    preg_match('/^[0-9,-\s]*[\,]{1}[0-9-]{0,3}$/'$str_zahl))
    {
    // Es gibt nur Tausender Separatoren
    // Alle Kommata enfernen
    $str_zahl str_replace(' ', , $str_zahl);
    $str_zahl str_replace(',', , $str_zahl);
    return 
    floatval($str_zahl);
    }
    else
    return 
    floatval($str_zahl);
    }
    else
    {
    return 
    0;
    }

    leider bekomme ich Ihn bei mir nicht zum laufen.

    Es gibt auch Fehlermeldungen: Überall dort wo zwischen ' ' & $str_zahl bzw. ' . ' & $str_zahl bzw. ' , ' & $str_zahl lediglich zwei Kommata stehen meckert er.

    Meine Frage: Wie schaffe ich es, dass
    PHP-Code:
    <?php echo $str_zahl?>
    eine für die MySql Datenbank gültige Dezimalzahl

    ausgibt?

  • #2
    1. Wäre es toll, wenn Du die Fehlermeldungen postest, wenn da schon welche kommen
    2. Schau ins Handbuch, was an der Stelle für str_replace eigentlich stehen sollte
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Wieso kommen denn Zahlen mit Tausender/Trennpunkten an. oder anders gefrasgt wo kommen die Zahlen her?

      Kommentar


      • #4
        PHP-Code:
        $str_zahl $_GET['miete']; 
        Ich hab' das jetzt so:

        PHP-Code:
        function float($str_zahl)
        {
        if(
        preg_match('/([0-9\.,-]+)/'$str_zahl$array_treffer))
        {
        // Zahl gefunden also können wir weitermachen
        $str_zahl $array_treffer[0];

        if(
        preg_match('/^[0-9.-\s]*[\,]{1}[0-9-]{0,2}$/'$str_zahl))
        {
        // Komma als Dezimal Separator
        // Alle Punkte entfernen und anschließend das Komma in einen
        //Punkt umwandeln
        $str_zahl str_replace('.'' '$str_zahl);
        $str_zahl str_replace(',''.'$str_zahl);
        return 
        floatval($str_zahl);
        }
        elseif(
        preg_match('/^[0-9,-\s]*[\.]{1}[0-9-]{0,2}$/'$str_zahl))
        {
        // Punkt als Dezimal Separator
        // Alle Kommata entfernen
        $str_zahl str_replace(',',  ' '$str_zahl);
        return 
        floatval($str_zahl);
        }
        elseif (
        preg_match('/^[0-9.-\s]*[\.]{1}[0-9-]{0,3}$/'$str_zahl))
        {
        // Es gibt nur Tausender Separatoren
        // Alle Punkte enfernen
        $str_zahl str_replace('.',  ' '$str_zahl);
        return 
        floatval($str_zahl);
        }
        elseif (
        preg_match('/^[0-9,-\s]*[\,]{1}[0-9-]{0,3}$/'$str_zahl))
        {
        // Es gibt nur Tausender Separatoren
        // Alle Kommata enfernen
        $str_zahl str_replace(','' '$str_zahl);
        return 
        floatval($str_zahl);
        }
        else
        return 
        floatval($str_zahl);
        }
        else
        {
        return 
        0;
        }

        gemacht.

        Es werden keine Fehlermeldungen geschmissen. Funktionieren tut das allerdings trotzdem nicht.

        Bei einer Zahl, z.B. 1.00 verändert sich die Darstellung bei:

        PHP-Code:
        <?php echo $str_zahl?>
        nicht.

        Kommentar


        • #5
          Was willst du denn mit der Zahl dann machen?

          Vermutlich besser zuerst zu einem float normalisieren um dann damit je nach Ziel weiter verarbeiten.

          Siehe hier https://php-de.github.io/jumpto/float-vereinheitlichen/
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen
            Was willst du denn mit der Zahl dann machen?

            Vermutlich besser zuerst zu einem float normalisieren um dann damit je nach Ziel weiter verarbeiten.

            Siehe hier https://php-de.github.io/jumpto/float-vereinheitlichen/
            Ich will die Zahl Datenbank gerecht formatieren

            Kommentar


            • #7
              Warum machst du das nicht schon im Formular?
              https://wiki.selfhtml.org/wiki/Refer...Attribute/lang

              Kommentar


              • #8
                Zitat von protestix Beitrag anzeigen
                Warum machst du das nicht schon im Formular?
                https://wiki.selfhtml.org/wiki/Refer...Attribute/lang
                Referenz:HTML/Attribute/lang?

                Wie wirkt sich das auf die Formulareingabe aus?

                Kommentar


                • #9

                  Du bist vergesslich, den das hatte ich dir schon mal geschrieben, siehe diese Beitrag https://www.php.de/forum/webentwickl...punkt-getrennt
                  mit Verweis auf diesen
                  https://www.php.de/forum/webentwickl...komma-vs-punkt

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    Du bist vergesslich, den das hatte ich dir schon mal geschrieben, siehe diese Beitrag https://www.php.de/forum/webentwickl...punkt-getrennt
                    mit Verweis auf diesen
                    https://www.php.de/forum/webentwickl...komma-vs-punkt
                    input type="number" verlangt eine Ganzzahl.
                    Ich möchte aber auch Kommazahlen zulassen

                    Kommentar


                    • #11
                      Zitat von king-ich Beitrag anzeigen
                      Ich will die Zahl Datenbank gerecht formatieren
                      Mit der verlinkten Funktion geht das. Eine DB braucht nämlich Floats. Soweit die Server (PHP, DB) Seite.

                      Wenn es HTML seitig zusätzlich schon im Form auch geht dann die beiden nutzen und gut ist.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von king-ich Beitrag anzeigen

                        input type="number" verlangt eine Ganzzahl.
                        Ich möchte aber auch Kommazahlen zulassen
                        Das stimmt so nicht:

                        https://codepen.io/pen/?&editable=true

                        Kommentar


                        • #13
                          jonas3344
                          Er liest nicht mal die Beiträge richtig, daher müssen wir hier immer alles wiederholen. Das steht hier mit Beispiel
                          https://www.php.de/forum/webentwickl...72#post1530172
                          Link gab es oben schon.

                          king-ich
                          Bitte lies dir wenigsten die verlinkten Beiträge ordentlich durch. Es ist müssig immer alles 3 mal zu erklären.

                          Referenz: http://w3c.github.io/html-reference/input.number.html

                          Kommentar


                          • #14
                            Ich weiss, aber man soll doch die Hoffnung nie aufgeben, nicht?

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              1. Wäre es toll, wenn Du die Fehlermeldungen postest, wenn da schon welche kommen
                              2. Schau ins Handbuch, was an der Stelle für str_replace eigentlich stehen sollte
                              Danke für die ganzen Antworten und verweise auf bestehende Threads.

                              Mir gefallen aber die HTML Fehlermeldungen nicht, die bei input type="number" geschmissen werden. Fehlermeldungen werden keine mehr geschmissen.

                              Deswegen möchte ich gerne den Code
                              PHP-Code:
                              function float($str_zahl)
                              {
                              if(
                              preg_match('/([0-9\.,-]+)/'$str_zahl$array_treffer))
                              {
                              // Zahl gefunden also können wir weitermachen
                              $str_zahl $array_treffer[0];

                              if(
                              preg_match('/^[0-9.-\s]*[\,]{1}[0-9-]{0,2}$/'$str_zahl))
                              {
                              // Komma als Dezimal Separator
                              // Alle Punkte entfernen und anschließend das Komma in einen
                              //Punkt umwandeln
                              $str_zahl str_replace('.'' '$str_zahl);
                              $str_zahl str_replace(',''.'$str_zahl);
                              return 
                              floatval($str_zahl);
                              }
                              elseif(
                              preg_match('/^[0-9,-\s]*[\.]{1}[0-9-]{0,2}$/'$str_zahl))
                              {
                              // Punkt als Dezimal Separator
                              // Alle Kommata entfernen
                              $str_zahl str_replace(',',  ' '$str_zahl);
                              return 
                              floatval($str_zahl);
                              }
                              elseif (
                              preg_match('/^[0-9.-\s]*[\.]{1}[0-9-]{0,3}$/'$str_zahl))
                              {
                              // Es gibt nur Tausender Separatoren
                              // Alle Punkte enfernen
                              $str_zahl str_replace('.',  ' '$str_zahl);
                              return 
                              floatval($str_zahl);
                              }
                              elseif (
                              preg_match('/^[0-9,-\s]*[\,]{1}[0-9-]{0,3}$/'$str_zahl))
                              {
                              // Es gibt nur Tausender Separatoren
                              // Alle Kommata enfernen
                              $str_zahl str_replace(','' '$str_zahl);
                              return 
                              floatval($str_zahl);
                              }
                              else
                              return 
                              floatval($str_zahl);
                              }
                              else
                              {
                              return 
                              0;
                              }

                              mit dem Ergebnis dass die Zahl Datenbankgerecht formatiert wird nutzen.

                              Was willst du denn mit der Zahl dann machen?

                              Vermutlich besser zuerst zu einem float normalisieren um dann damit je nach Ziel weiter verarbeiten.

                              Siehe hier https://php-de.github.io/jumpto/float-vereinheitlichen/
                              funktioniert bei mir nicht.

                              Kommentar

                              Lädt...
                              X