RegEx für Zahlen mit Tausendertrennpunkten


king-ich

Mitglied
PHP:
<?php
$str_zahl = $_GET['miete'];
Ich versuche Preiseingaben Datenbank gerecht zu formatieren:

PHP:
<?php          
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;
}
}
Es werden keine Fehlermeldungen geworfen. Funktionieren tut der Code aber trotzdem nicht.

Bei einer Zahl, z.B.: 1.00 ändert sich in der Darstellung bei
PHP:
<?php echo $str_zahl; ?>
nichts. Sind die RegExes falsch?

Oder bediene ich die funktion
PHP:
<?php

str_replace()
falsch?
 

Sempervivum

Erfahrenes Mitglied
Ja, wenn ich die Fehleranzeige einschalte, werden Fehler bei den Regexes gemeldet:
Code:
        // if (preg_match('/^[0-9.-\s]*[\,]{1}[0-9-]{0,2}$/', $str_zahl))
        if (preg_match('/^[0-9.\-    ]*,[0-9]{0,2}$/', $str_zahl)) // dies funktioniert
  • \s ist innerhalb einer Aufzählung nicht zulässig, ich habe es durch Blank und Tab ersetzt
  • - ist ein Sonderzeichen in einer Aufzählung, ich musste einen \ voranstellen
[\,]{1} lässt sich außerdem vereinfachen, indem man nur das Komma hinschreibt.
 

king-ich

Mitglied
Ja, wenn ich die Fehleranzeige einschalte, werden Fehler bei den Regexes gemeldet:
Code:
        // if (preg_match('/^[0-9.-\s]*[\,]{1}[0-9-]{0,2}$/', $str_zahl))
        if (preg_match('/^[0-9.\-    ]*,[0-9]{0,2}$/', $str_zahl)) // dies funktioniert
  • \s ist innerhalb einer Aufzählung nicht zulässig, ich habe es durch Blank und Tab ersetzt
  • - ist ein Sonderzeichen in einer Aufzählung, ich musste einen \ voranstellen
[\,]{1} lässt sich außerdem vereinfachen, indem man nur das Komma hinschreibt.
Kannst Du mir vielleicht sagen wo ich mehr über RegExes erfahre?