2010-12-27 6 views
1

Ich habe einige Probleme mit Regex Ich versuche, ein Geldbetrag wie $ 28,84 zu nehmen und es in meiner Datenbank als Pfennige zu speichern. Im Moment bin ich mit diesenDollars zu Pennies

$amount="$28.84"; 
$amount_number= ereg_replace("[(^0-9)(.)(0-9){2}]", "", $amount); //return a decimal 
$store_amount = $amount_number*100; //get number of pennies 

ich auch „“ versuchen, die Anzahl der Streifen ‚‘ und alles, was nicht eine Dezimalzahl.

+0

ich ein wenig mehr Informationen über Fehlerbedingungen benötigen würde. Mit anderen Worten, haben Sie bereits überprüft, ob $amount im richtigen Format ist? Was ist, wenn es zu viele oder zu wenige Dezimalstellen gibt? Ungültige Zeichen? Es sieht so aus, als ob du sagst, dass alles andere als eine Ziffer einfach entfernt wird, aber ich versuche sicherzustellen, dass das wirklich das ist, was du willst. – Andrew

+0

Und was ist dein Problem? –

+2

Verwenden Sie nicht ereg: es ist veraltet. –

Antwort

5

Ich denke, dass Sie falsch gehen. Warum nicht das Dollarzeichen ersetzen, verwenden Sie floatval und dann mit 100 multiplizieren. Verwenden Sie dann intval, um die Dezimalstelle aus dem Ergebnis loszuwerden, da Sie keine Bruchteile von einem Penny wollen.

$amount = intval(floatval(str_replace("$", "", $amount))*100); 

Ich habe es nicht getestet, aber so etwas sollte funktionieren.

Schauen Sie sich hier an, wie einige Leute mit Währungsfragen umgehen. Sie haben eine Menge von Methoden:
http://php.net/manual/en/function.floatval.php

+0

Funktioniert das mit Komma in Höhe? – BandonRandon

+0

Ich bin mir nicht sicher - Sie können es versuchen oder Kommas durch eine leere Zeichenfolge zu ersetzen. Fügen Sie einfach einen weiteren 'str_replace' um den ersten hinzu. – zsalzbank

+0

+ 1 seit der Verwendung von regulären Ausdruck für arithmetische Verfahren ist lächerlich. – cbrandolino

0
$amount = "$28.84"; 
$amount_number = floatval(substr($amount,1)); 
$store_amount = $amount_number*100.0; 

Sie können nur substr verwenden, um die Dollar-Zeichen zu entfernen. Wenn Sie wirklich einen regulären Ausdruck verwenden möchten, versuchen Sie dies:

$amount = "$28.84"; 
$amount_number = floatval(preg_replace('/[^\d\.]/', '', $amount)); 
$store_amount = $amount_number*100.0; 

Sie müssen floatval verwenden, um die Menge von einem String in einen Schwimmer zu konvertieren.

1
[(^0-9)(.)(0-9){2}] 

sollte

[0-9.] 

kann nicht verwendet werden() innerhalb []. Das einzige Sonderzeichen, das in [] verwendet werden kann, ist das Zeichen ^.

4

Vorausgesetzt, dass die Eingabe bereits validiert wurde, entfernen Sie alle Nicht-Ziffern und konvertieren Sie dann das Ergebnis unter Verwendung von int_val in eine ganze Zahl.

Persönlich würde ich alle nicht-Standard-Eingänge wie $12.3 ablehnen. Meiner Meinung nach sollten Sie im Umgang mit Geld streng darauf achten, welche Eingaben Sie akzeptieren, und nicht versuchen zu erraten, was gemeint ist.

+1

Dies setzt voraus, dass immer genau zwei Stellen hinter dem Komma stehen. Andernfalls werden 23.4 und 2.34 in die gleiche Ganzzahl konvertiert. –

+0

+1. Einige Links: http://www.google.com/search?q=schwebend+point+limitationen http://docs.sun.com/source/806-3568/ncg_goldberg.html – asveikau

+0

Die Validierung erfolgt auf der JavaScript-Seite Dinge, die großartig funktionieren sollten, wenn nicht jemand JavaScript deaktiviert hat und dumm ist. – BandonRandon

0

Warum entfernen Sie nicht einfach das Dollarzeichen und multiplizieren mit 100?

preg_replace (/ \ $ /, "", $ Menge);

+0

Ich muss Komma auch entfernen. – BandonRandon

0

Versuchen zweite Zeile chaning wie folgt:

$amount_number= ereg_replace("[^0-9.]", "", $amount); 
+0

Ich versuchte das, dies streift die Dezimalzahl auch, so $ 5,00 wird 500 und daher 500000 zurück, das ist die Pennies für 500 $ und nicht $ 5 – BandonRandon

+1

Wenn die. Ist abgestreift, dann muss der Betrag nicht mit 100 multipliziert werden, um es in Pennies umzuwandeln. – Chandu

1
$amount = "$28.84"; 
$amount = preg_replace("#([^0-9\.]+)#", "", $amount); 
$amount = explode(".", $amount); 
$amount = (intval($amount[0]) * 100) + intval($amount[1]); 
echo $amount; //2884 
+0

Diese Antwort war hilfreich für mich, sie löste ein Problem, das ich hatte. Vielen Dank! Prost! –