2009-08-07 8 views
0

Ich versuche, eine Regex für die Überprüfung der Werte von übermittelten Tags für ein Freiform Folksonomy System zu erstellen. Hier ist was ich jetzt habe.PHP - Folksonomy-Tag überprüft Regex

if (!preg_match('/([^-\\[email protected]\'])+/',$proposedtag)) { 
    //true, good 
    return true; 
} else { 
    //false, bad characters 
    return false; 
} 

Ich möchte zulassen: Bindestrich, Schrägstrich, Schrägstrich, a-z, A-Z, 0-9, Punkt, zu unterstreichen, um Zeichen und einzelne Anführungszeichen, und alle anderen nicht zulassen.

Ich bin mir ziemlich sicher, dass eine negierte Zeichenklasse die Art und Weise auf diese zu gehen ...

jedoch über meinen Code scheint andere Zeichen (wie +) zu ermöglichen, und ich bin mir nicht sicher, warum. Auch als Nebenbemerkung bin ich nicht sicher, ob ich sicherstellen werde, dass ich nicht versehentlich SQL-Injektionen erlaube. Irgendwelche Tipps?

Antwort

2

Ich glaube, es ist ein Fluchtproblem mit den Backslash-Zeichen in Ihrer Charakterklasse. Versuchen Sie es stattdessen, es scheint besser zu funktionieren, wenn ich es getestet habe. Beachten Sie die Doppel-Escaping auf den Backslashes (die ich bis zum Ende bewegt):

if (!preg_match('/([^\[email protected]\'\\\\])+/',$proposedtag)) { 
+0

Dies funktioniert für mich bisher. Allerdings habe ich es so geändert: '/([^\-\/a-zA-Z0-9\[email protected]\\\\\\\\\\\\\\\\\\\\'} + ', um den Schrägstrich einzufügen. – jjclarkson

+0

Ich werde noch ein paar Tests machen, bevor ich das Häkchen ankreuze;) – jjclarkson