2010-12-17 16 views
0

Angenommen, ich habe eine HTML-Seite mit einem Textfeld, die den Benutzer auffordert, ein Wort einzugeben. Dann benutze ich die Variable $_POST[] in meinem PHP-Skript, um mit der Variablen zu spielen und etwas zu tun. Meine Seite und meine PHP-Skripte funktionieren mit der UTF-8-Kodierung, so dass alles vom Benutzer eingegeben werden kann.Wie kann sichergestellt werden, dass eine Zeichenfolge nur Zeichen aus einer vordefinierten Liste akzeptierter Zeichen enthält?

Was möchte ich wissen, wie kann ich sicherstellen, dass alle in dem eingegebenen Wort enthaltenen Zeichen Teil einer vordefinierten Liste von Zeichen sind?

Zum Beispiel würde die Liste die Zeichen 0 bis 9, a bis z, A bis Z enthalten, aber auch einige andere Zeichen wie ü, ù, ô, é, à, ẑ und so weiter. Was ich nicht will, sind Zeichen wie aus dem russischen Alphabet wie а, з, б, у, etc und andere Arten von exotischen Charakteren.

Ich könnte regulären Ausdruck verwenden, aber ist es die am besten geeignete Lösung? Ist das nicht zu langsam? Was ist mit einem Array mit allen Charakteren? Ist es mir oder es klingt sehr langsam, durch jedes Zeichen eines Wortes zu durchlaufen und auch durch die Reihe von akzeptierten Zeichen zu durchlaufen und jede Kombination zu testen.

Kennen Sie eine gute Lösung?

Danke.

+0

Es scheint, dass Sie über die Geschwindigkeit besorgt sind. Warum nicht JavaScript verwenden? – Babiker

+0

Weil ich die Datenvalidierung auf der Serverseite bevorzuge. Ich mache mir Sorgen um die Geschwindigkeit, aber sind die Lösungen, über die ich nachgedacht habe, wirklich langsam? Vielleicht bin ich falsch. –

+2

Reguläre Ausdrücke sollten in Ordnung sein, mach dir keine Sorgen darüber, wie schnell etwas ist, bis du weißt, wo deine Flaschenhälse sind (Hinweis: sie sind wahrscheinlich nicht dort, wo du denkst, dass sie es sind). –

Antwort

2

REs sind schnell, und sie sind der Weg zu gehen. Erstellen Sie eine Liste der gewünschten Zeichen und invertieren Sie dann die Übereinstimmung, wie unten gezeigt.

if re.match(".*[^abcA-Z]", "d"): 
    print "Your string has illegal characters" 
+0

Danke. Ich denke, ich werde bei diesem Ansatz bleiben. –

Verwandte Themen