Ankündigung

Einklappen
Keine Ankündigung bisher.

regulären Ausdruck für Währungen...

Einklappen

Neue Werbung 2019

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

  • regulären Ausdruck für Währungen...

    Hallo,

    ich suche einen regulären Ausdruck für folgendes Problem:
    • ich habe einen String ($nr) mit 1.000er Punkten, Währung (€, Euro oder andere Währung möglich, und ein Negativ-Zeichen (ist aber Optional)

    Nun nun sollen alle alle 1.000er Punke und die Währung entfernt werden...

    Ergebnis des Beispiels: -2134234,010

    kammst du helfen, wie ich das realisieren könnte?

    Gruß

    RaynAnderson


    PHP-Code:

    <?php
    $nr 
    '-2.134.234,010Euro'
    // $nr = preg_replace('![^0-9],!', '', $nr); 
    $nr preg_replace('![^0-9 ,]!','![^,]!'''$nr); 
    echo 
    $nr;  
    ?>

  • #2
    Diesmal ganz ohne reguläre Ausdrücke:
    PHP-Code:
    $nr '-2.134.234,010Euro';
    $number = (float) str_replace(',''.',str_replace('.'''$nr));
    var_dump$number );

    // deutsche Ausgabe falls gewünscht
    var_dumpnumber_format($number2',''') ); 
    ergibt
    Code:
     float -2134234.01  
     string '-2134234,01' (length=11)

    Kommentar


    • #3
      Hallo Protestix,

      vielen Dank, funktioniert SUPER...

      Gruß

      RaynAnderson

      Kommentar


      • #4
        Alternativ kannst du dir auch mal NumberFormatter (intl-Extension vorausgesetzt) ansehen:

        PHP-Code:
        $formatter = new \NumberFormatter('de-DE', \NumberFormatter::CURRENCY);

        // format
        $output $formatter->format(123456.78);
        \
        var_dump($output); // "123.456,78 €" (string)

        // parse
        $float $formatter->parse("123.456,78 €");
        \
        var_dump($float); // 123456.78 (float) 
        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        Kommentar


        • #5
          lottikarotti
          Leider funktioniert das parsen deines Beispieles nicht wie von dir angegeben, es kommt ein boolean false
          siehe https://3v4l.org/u11fD

          Kommentar


          • #6
            Zitat von protestix Beitrag anzeigen
            lottikarotti
            Leider funktioniert das parsen deines Beispieles nicht wie von dir angegeben, es kommt ein boolean false
            siehe https://3v4l.org/u11fD
            Das wird an den installierten Locales liegen. Nutzt man bspw. "en-US" und als Eingabe "$123,456.78" funktioniert es wie gewünscht: https://3v4l.org/0m0OU
            [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

            Kommentar


            • #7
              Interessante Funktion.
              An den Locales lag es nicht, sondern daran, dass der Parser von Numberformatter von der Landeseinstellung für Währung ausgeht. (hat mich ein wenig Recherche gekostet das herauszufinden)
              In den USA schreiibt man $ vor dem Betrag während man bei uns in Deutschland das € mit einer Leerstelle hinter dem Betrag schreibt. Daher konnte sein String '-2.134.234,010Euro' nicht von CURRENCY geparst werden.

              Eine mit NumberFormatter() funktionierende Lösung habe ich mit pattern und DECIMAL erreichen können
              PHP-Code:
              $nr '-2.134.234,010Euro';
              $formatter = new NumberFormatter('de_DE'NumberFormatter::DECIMAL);
              $formatter->setPattern("#0,#euro");
              $float $formatter->parse($nr);
              var_dump($float); 
              Die Dokumentation im Handbuch ist nicht gerade für Laien gemacht, vieles muss man wissen (ICU Landeseinstellungen) und ist schlecht oder gar nicht dokumentiert, dennoch halte ich numberFormatter für wirklich gut und werde es jetzt öfter verwenden.

              NB.
              Die Landeskürzel werden nach ICU mit Unterstrich getrennt nicht mit Bindestrich, vergl. en-US, en_US, auch wenn es oft nichts ausmacht.

              Kommentar

              Lädt...
              X