2017-08-17 3 views
2

Ich habe ein System, wo Sie eine Menge eingeben und es berechnet einige Sachen und legt es in die Datenbank.PHP-Formatierung gruppiert Tausende zu nicht gruppiert

Allerdings habe ich festgestellt, dass mehrere Personen verschiedene Formate eingeben.

Einige Leute ein: 3474,12832752 Und manche Menschen ein: 3474,12832752 < --- richtig Und dann einige Leute diese: 3,747.12832752

Nun, wie würde ich die beiden tun so, die falsche Formate zum richtigen?

Zuvor habe ich gerade so "," ersetzt durch "." um das erste falsche zu lösen, aber in letzter Zeit haben die Leute das letzte falsche gemacht, wo Tausende gruppiert sind.

Wie würde ich erfolgreich die zwei falschen auf die richtige formatieren?

+0

Also welche gewünschte Ausgabe wollen Sie für '3,747.12832752'? –

+0

Sie könnten einen Text über der Eingabe haben, der den Leuten erklärt, welches Format eingegeben werden soll und dann nur Zahlen und Punkte im tatsächlichen Eingabefeld erlauben. –

Antwort

2

Vor:

  • Mit jQuery, lassen Sie Ihre Eingabe nur akzeptieren, und nicht zulassen " "

In Controller".":

  • Wenn Benutzer didn‘ t Javascript in seinem Browser haben, prüfen, ob die Eingabe "," enthält, falls dies der Fall ist, einen Fehler mit einer Nachricht zurücksenden, um dem Benutzer mitzuteilen, dass nur Punkte akzeptiert werden.
2

Es gibt zwei Möglichkeiten:

  • Schützen Sie Ihren Benutzer einen Wert in der „falschen“ Format eingeben, nur ablehnen
  • die „falschen“ formatiert Werte über regex erkennen und ersetzen Sie die falschen Zeichen mit den richtigen sind
+2

Die zweite Alternative könnte ziemlich unmöglich sein. Wenn jemand "123,123" schreibt, könnte das "123123" heißen oder "123.123". Ich würde für Ihre erste Alternative gehen, einfach ablehnen. –

+0

Ich nehme an, du hast Recht, ich würde es auch nicht empfehlen, aber es ist eine Option, wenn (die Begründung hier drin) die Restriktionen möglicherweise nicht anwendbar sind. –

1

im Front-End einige jQuery-Plugins verwenden können, um zu validieren/zwingen, das Format vor dem Senden prüfen jQuery Inputmask.

Falls Sie gezwungen sind, die Daten über das Backend zu formatieren, können Sie eine helper Funktion wie folgt erstellen:

function correctNumber($number){ 
    return substr_replace(preg_replace('/[.,]/', '', $number), ".", 4, 0); 
} 

in Ihrem Controller Dann können Sie einfach formatieren Sie die Nummer auf dem richtigen Weg:

echo correctNumber("3474,12832752"); 
//3474.12832752 

echo correctNumber("3747.12832752"); 
//3474.12832752 
1

Keines dieser Formate ist falsch. Während der zweite der amerikanische Standard zum Schreiben von Dezimalzahlen ist, verwenden viele europäische Länder und andere Orte auch ein Komma anstelle eines Punktes als Dezimaltrennzeichen. Beide Schreibweisen sind somit gültig. Letzteres ist auch vollkommen gültig, da es eine Standardmethode ist, Zahlen auf Papier zu schreiben.

Wenn Sie also Ihren Benutzern nicht explizit und sichtbar mitteilen, dass numerische Einträge in einem bestimmten Format vorliegen sollen, haben sie das Recht, das zu verwenden, das sie gewohnt sind.

Ihre opitions hier sind entweder deutlich zu machen, dass nur numerische Werte ohne nicht-stellige Zeichen außer für einen Punkt der Dezimalstellen trennen gelassen werden oder einen Prozess zu entwerfen, diese unterschiedlichen Schreib zu konvertieren:

function format_number($value) { 
    $comma = strpos($value, ','); 
    $dot = strpos($value, '.'); 
    if ($dot === false AND $comma !== false AND strrpos($value, ',') == $comma) { 
     $value = str_replace(',', '.', $value); 
    } 
    return str_replace(',', '', $value); 
} 

Ich überprüfte es und es gibt amerikanisches Schreiben für Ihre drei Fälle zurück.