Jeder hat seine eigene Art einen Geldbetrag einzugeben, der eine gibt 11,99 ein, der nächste 11.99. Weiter geht es mit den 1000er Trennzeichen, spätestens, wenn das System auch auf die amerikanische Schreibweise können soll, brauchen wir eine Methode, die jegliche Eingabe in einen gültigen Float-Wert umwandelt, am besten auch noch richtig.

Nach langem hin und her und viel Recherche habe ich mir aus diversen Codefragmenten das hier zusammengebaut und es scheint zu funktionieren:

	function price2float($string){
	    $string = trim($string);
		if(preg_match('/([0-9\.,-]+)/', $string, $matches)){
			// Zahl gefunden also können wir weitermachen
			$string = $matches[0];

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

Beispiele zum selbsttesten:
1234.456,78 => 123456.78
1234,456.78 => 123456.78
12.34 => 12.34
12,34 => 12.34
123.456.789 => 123456789
123,456,789 => 123456789

wie immer bin ich für Verbesserungsvorschläge offen!

5 Antworten zu “Werteingabe (Geld) in gültiges Float umwandeln”

  1. m1 says:

    Sehr schön. Damit musste ich mich vor zwei Jahren auch rumärgern. Ich habe das ähnlich gelöst, habe damals aber ein paar Formen vernachlässigt.

  2. Michael says:

    ist aber auch Mist die ganze Geschichte, warum konnte man sich nicht auf EIN System einigen? Nein, jeder braucht seinen eigenen Standard.

  3. britzel says:

    Sehr schöne Funktion! Vielen Dank, die hat mir gerade sehr gut geholfen…

  4. Andi says:

    Vielen Dank! Das hab ich jetzt gebraucht.

  5. Christoph says:

    Hey Michael,

    super gut, ich drei Stunden rumprobiert aber nicht alles sauber auflösen können, deine Funktion funktioniert perferkt.

    Vielen Dank!

Hinterlasse einen Kommentar.

Network-wide options by YD - Freelance Wordpress Developer