Hi!
function php_preis($eingegebener_preis){
if (preg_match("/.[0-9]{1,2}$/",$eingegebener_preis)) {
return str_replace(",","",$eingegebener_preis);
}
else {
return str_replace(",",".",str_replace(".","",$eingegebener_preis));
}
}
verstehe ich den Ausdruck richtig?:
- Du suchst nach einem String, der einen Punkt und danach ein oder zwei Ziffern enthält (ami-Screibweise) und löscht dann das Komma (aber nur, sofern vorhanden!)
hmm...
sieht gut aus. aber was ist, wenn der User versehentlich oder aus terroristischen Motiven drei nachkomma(nachpunkt)stellen schreibt?
wird dann nicht aus: 150,000,000.000 (für hundertfünfzig-komma-null-millionen) eine: 150.000.000000 ?
Ja, aber am bsten fange ich für solche Dinge den return-Wert vorher nochmal ab udn prüfe mit nem regulären Ausdruck ob es korrekt ist, wenn nicht gibts nen Fehler, ich kann ja nicht jede Doofheit der User Manuell abfangen ;-)
- ist 1. nicht der Fall gehst Du wohl von deutscher Buchhalter-Schreibweise aus und löscht den Punkt (als tausender-Trenner) und ersetzt dann das Komma durch einen Punkt.
hmm...
ich glaube das würde gehen - wenn der User brav ist und das tut, was Du willst.
aber was ist, wenn er nur mehrere Kommas eingibt, z.B.: 150,000,000 für hundertfünfzigmillionen? dann kommst Du nicht in Fall 1. rein, oder? Du erhälst also: 150.000.000
Auch richtig. Und da auch das eine definitiv Fehlerhafte Usereingabe ist wird das auch am Ende abgefangen, wenn der endgültige Wert nicht mit /[0-9]+.[0-9]{2}/ übereinstimmt.
Was habe ich vieleicht nicht bedacht? Hat es Sinn [...] Währungsangaben abzufangen, also auch wenn jemand dahinter oder davor noch EUR, €, USD, $ ... eingibt?
Ich glaube schon - wichtig finde ich vor dem Abschicken der Zahl eine Kontrollausgabe: "das haben Sie eingegeben: wolle Sie das senden?"
Das will ich vermeiden, nur wegen einer Zahl einen extra-Schritt einbauen, daher brauche ich eine Prüfung die entweder 100%ig das richtige umwandelt oder im Zweifel einen Fehler ausgibt. Die Währungen werde ich auch mal filtern und entfernen, da eine Währung vorgeschreiben ist, z.B. USD, kann ich ja noch prüfen /(USD|$) ?(.*) ?(USD|$)/ sowas der Art. Und wenn irgendwelche anderen Zeichen gefunden werden => FEHLER!
Ich habe die Ersetzungen mal so gemacht (fängt auch alle nicht Zahlen ab, bzw. löscht sie aus dem String) allerdings nicht so elegant wie Du und in JavaScript:
[...]
nicht schlecht! Aber ich denke mit Regulären Ausdrücken ist das in PHP etwas einfacher zu machen! Danke für die Tipps!
Grüße
Andreas