Hallo Forum,
ich stoße bei PHP-Seiten immer auf das Problem, dass ich Benutzereingaben validieren muss. Ich möchte es jetzt endlich mal richtig[tm] machen, indem ich all diese Funktionen in eine einzige Klasse packe. (bisher hab' ich mir bei jedem Projekt mehr oder weniger immer etwas neues zusammengebastelt) Ich werde diese Klasse dann unter die (L)GPL-Lizenz stellen, sofern mir hier niemand einen triftigen Grund nennt, dies nicht zu tun. ;-)
Als erstes habe ich ein kleines Problem: Ich würde am liebsten \w und \W in den regulären Ausdrücken verwenden, aber die Funktionieren im C-Locale nur mit den Zeichen A-Z (bzw. a-z). setlocale möchte ich nicht verwenden, da das (a) nicht thread-safe ist und (b) hab' ich das unter Windows noch nicht zum laufen gebracht. (und unter Linux noch nicht probiert, nachdem ich so enttäuscht war) Gibt es da eine andere Möglichkeit, als Zeichen hardzucoden? Wie sieht das überhaupt mit anderen Zeichensätzen aus? Ich arbeite bisher nur mit Latin1, aber wie behandle ich prinzipiell z.B. russische oder japanische Zeichensätze? (nicht nur in meinen regulären ausdrücken)
Dann stellt sich die Frage, was meine Klasse alles validieren können soll.
Am Einfachsten geht das mit Emailadressen, da nehme ich mir einfach den Feature-Artikel vor: http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/ Bei Emailadressen werde ich aber nur die Syntax überprüfen, das ganze DNS/SMTP-Zeug ist IMHO schwachsinn. (wenn man sich auf die Existenz verlassen muss, dann schickt man halt eine Email mit einem eindeutigen Link)
Danach gibt's noch URIs, die kann ich mit dem Moster von regulärem Ausdruck aus dem Archiv abdecken. ;-)
Bei Zahlen und Datum habe ich mir überlegt, dass die jew. Methode der Klasse gleich eine für PHP verwertbare Zahl bzw. einen Timestamp zurückliefert.
Dann fängt es an, schwierig zu werden:
* Telefonnummern: Aus welchen Zeichen dürfen Telefonnummern bestehen? Reichen Ziffern, Leerzeichen, runde Klammern, / und am Anfang evtl. ein + aus? Oder ist das zu locker?
* Zahlen: Welche Formen gibt es, Zahlen anzugeben? (die im Internet auch verwendet wird) Ich kenne 0.000,00 sowie 0 000,00 sowie 0,000.00 sowie 0 000.00 sowie 0000,00 sowie 0000.00. Gibt es auch andere Möglichkeiten? Wird das Tausendertrennzeichen immer verwendet, um die Zahl in Dreiergruppen aufzuteilen, oder kann es sein, dass der nur zwischen der dritten und vierten Stelle (von Rechts nach dem Dezimaltrennzeichen) verwendet wird, und nicht zwischen der sechsten und ziebten Stelle?
* Datum: Mit strtotime() möchte ich auch ungern arbeiten, gerade wegen setlocale. Welche Möglichkeiten gibt es, ein Datum einzugeben? Sollte ich da sehr großzügig sein, und vieles erlauben, oder sollte ich das dem Script, das die Klasse verwendet, überlassen. (dass es halt das erwartete Format übergibt) Desweiteren: ich würde gerne Zeitzonen und Sommer- und Winterzeit berücksichtigen (können), daher kommen für mich die lokalisierten Datums- und Zeitfunktionen von PHP nicht in Frage, da der Server selbst ja in sehr verschiedenen Zeitzonen arbeiten kann. (je nachdem, wie er konfiguriert ist) Im Prinzip müsste ich für die ganze lokalisierung (wegen Sonderzeichen, Zeitzonen, Zahlenformate) ja eine eigene Abstraktionsebene einführen, oder?
* Namen: Was darf alles in einem Namen (Eigennamen) enthalten sein? (jetzt mal eine saublöde Frage, ich weiß, aber immer wenn ich meinen regulären Ausdruck basteln will, dann weiß ich nicht so recht weiter)
* Postleitzahlen: Wie sieht das mit Postleitzahlen in anderen Ländern aus? In England hat man ja AFAIK auch Buchstaben in Postleitzahlen. Welche Möglichkeiten hat man da zur Validierung? Gibt es irgendwo (zumindest für Deutschland) eine Liste aller Postleitzahlen? So dass ich für Deutschland alle Postleitzahlen direkt überprüfen könnte und für alle anderen Länder nur die Syntax?
* Tja - und jetzt seid Ihr auch gefragt: Was kann man denn alles noch so validieren? Welche Möglichkeiten von Eingabe gibt es noch?
Wäre für Anregungen dankbar!
Grüße,
Christian