Zahlenfeld-Bereinigung

Mein Maskottchen... Wenn der User einen Betrag eingeben muss, der später in einer Datenbank gespeichert werden soll, so ist das kann einen schon mal das nackte Grausen packen...
Da werden Kommas, Punkte, Hochkommas, Leerzeichen oder sogar ganze Zeichenketten eingegeben. 

Beispiel:
Anstatt einfach nur 1875.50 in ein Zahlenfeld zu tippen, schaffen es manche, Fr. 1’ 875.50 
oder 1.875. 50 EURO einzugeben. Diese Funktion entfernt alle nicht- numerischen Zeichen und hinterlässt nur noch eine datenbanktaugliche Zahl.
Sogar Schreibfaule, die anstelle von 0.75 einfach nur .75 eintippen, können nun keinen Schaden mehr anrichten.

 

Testen Sie es gleich hier aus:

Geben Sie hier eine Zahl ein.
Schreiben Sie diese so, wie Sie es von ungeschicktesten Anwendern erwarten würden :-)

Quellcode anzeigen


Rückgabewert: 0
 
 
Zeile 3:  Das Copyrigt. Wird nicht für die Funktion benötigt, aber wäre anständig, wenn Sie es drinn lassen.
Zeile 4:  Version. Wird nicht für die Funktion benötigt, ist nur zur Info.
Zeile 7-11:  Ist es ein negativer Wert ? Dann merken wir uns das, aber entfernen vorläufig das Minus-Zeichen. um später bei Zeile 14 den Tippfaulen auch bei negativen Zahlen zu helfen.
Zeile 13:  Manche trennen Zahlen durch ein Komma, andere lieber durch Punkte ...
Komma(s) werden daher für die weitere Verarbeitung in Punkte wandeln.
Zeile 14: Gibt es am ANFANG einen "." ohne vorangehende Zahl, so entferne den und füge dafür ein "0." ein  
(Tippfaule Zeitgenossen , ich zum Beispiel, schreiben  lieber .15 .als 0.15 )
Zeile 15:

Gibt es am ENDE des Strings einen "." ohne weitere Zahlen, so ist der überflüssig und kann entfernt werden.

Zeile 16: Zerstückle die Zahl beim Punkt in eine Array.
Zeile 18 - 24: Im Idealfall haben wir nun eine Zahl mit nur einem Punkt.
Doch müssen wir nun einen möglicher Sonderfall bei berücksichtigen:
Wurden mehr als 1 Punkt erkannt, 
  • weil durch die Umwandlung von Kommas in Punkte 2 Punkte entstanden sind
  • oder einfach nur , weil ein schlecht geschulter Benutzer die Zahl "leserlicher" gestalten wollte, indem er Beispielsweise 1000er Beträge auch durch einen Punkt optisch trennen wollte ...

... so muss nun dieser Teil wieder als Ganzes zusammengefügt werden. Es ist ja unser ganzzahliger Bereich, der unglücklicher Weise in mehrere Teile zerlegt wurde.

In Zeile 15 werden die einzelnen Fragmente in einer neuen Array gesammelt und anschliessend in Zeile 17 wieder zusammengefügt.

Zeile 24 - 23: Es kann ja auch sein, dass nur ein ganzzahliger Betrag eingegeben wurde. Die Array besteht dadurch nur aus In dem Fall müssen die Variabeln entsprechend beschrieben werden.
Zeile 32 - 33: Alles, was keine Zahl ist, soll entfernt werden.
Zeile25:

Ursprünglich haben wir die Zahl beim Punkt getrennt ... 
Nun ist alles bereinigt, und wir müssen die beiden Teile wieder zusammenfügen.
Der ganzzahlige Bereich durchläuft die Funktion abs(), damit auch dann ein vernünftiger Wert zurückgegeben wird, wenn der Benutzer nur Leerzeichen eingegeben hat oder mehrere Nullen vor der eigentlichen Zahl.
... nun den Punkt nicht vergessen und negative Werte wieder als solche darstellen.

Zeile37:

Fertig!
Nun kann der Zahlenwert frisch geputzt und gestriegelt zurückgegeben werden.

Einbau:
  1. Speichern Sie den Quellcode in eine Datei namens zahlenbereinigung.php
  2. Binden Sie die Funktion am Anfang in Ihr Script ein, mit include ("zahlenbereinigung.php");
    (oder bauen Sie als alternative das Script direkt in Ihren Quelltext ein)
  3. Aufgerufen wird die Funktion mit Zahlenfilter(wert).
    Also Zahlenfilter($Zahl) oder Zahlenfilter(155.88)

Viel Spass !

 


Was diese Funktion NICHT macht:

  • Der zurückgegebene Wert wird nicht gerundet oder formatiert zurückgegeben. Dadurch kann meine Funktion auch für andere Werte als nur Beträge eingesetzt werden. 
    (Wer eine Formatierung der Zahl wünscht, soll bitte die PHP Funktion number_format benutzen.)
  • Diese Funktion ist kein Taschenrechner-Ersatz. Rechnungen werden NICHT aufgelöst.
    Gibt der User 55 + (100/2) ein, wird 551002 dabei herauskommen, da alle nicht numerischen Zeichen entfernt werden.

Was ich NICHT mache ...

  • Ich biete Ihnen keinen Support auf dieses Freeware-Script.
  • Ich werde es nicht für Sie umprogrammieren
  • Ich übernehme keine Haftung für das Script

Typische Fragen

Frage: Warum haben Sie das Script geschrieben?
Antwort:  Reine Notwehr. Sie glauben vielleicht gar nicht, was die User so alles in ein Zahlenfeld eintragen können...
 
Frage: Warum geben Sie das Script als Freeware frei ?
Antwort:  Weil ich schon von anderen Freeware-Scripten gelernt habe und es es für richtig halte, ab und zu ebenfalls etwas zu verschenken.
 
Frage: Darf ich das Scriptauch auf kommerziellen Seiten einsetzen ?
Antwort: Ja klar.
 
Frage: Was kostet es ?
Antwort: Nichts.
 
Frage: Darf ich es verkaufen ?
Antwort: Nein. Aber Sie dürfen es in Ihren kommerziellen Scripten einbauen und es so nutzen. Für Ihr eigenes Script können Sie selbstverständlich dennoch etwas verlangen.
 
Frage: Darf ich das Scriptanpassen oder verändern?
Antwort: Sicher. Aber alles auf Ihr eigenes Risiko.
Genau zu diesem Zweck finden Sie weiter oben den Quelltext erläutert.
 
Frage: Darf ich das Copyright entfernen?
Antwort: Ich habe keine Möglichkeit zu prüfen, ob Sie es drinnlassen.
Und auch Ihre Kunden werden da nicht nachschauen.
Es wäre aber anständig von Ihnen, wenn Sie es nicht entfernen.
 
Frage: Darf ich das Scriptveröffentlichen ? (Zeitschrift, PHP-Scriptseite, usw.)
Antwort: Kommt jeweils darauf an, wie und in welcher Form.
Fragen Sie mich vorher um Erlaubnis.

Copyright (c) by Martin Scheiben, CH - 9100 Herisau,
6. Februar, 2004

Bewerten Sie uns bei
@ PHP-Resource.de