2016-11-28 3 views
1

Ich habe eine Regex, die ich testen, um meine Registerform zu validieren, die Regex funktionierte perfekt vor ein paar Tagen und jetzt plötzlich, auch wenn ich die Regex in der Form übereinstimmt, die Client-Seite validiert und passiert (gleiche Regex) und dann spuckt die Serverseite die Else-Anweisung aus, die besagt, dass ich nicht jedes Mal mit der Regex übereinstimme. Irgendwelche Hinweise Jungs? Mein Regex funktioniert nicht plötzlich?

$usern = $_POST['username']; 
$regex = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}'; 

$Access = preg_match($regex, $usern); 

if($Access) 
{ 
    //database stuff here 
} 
else 
{ 
    echo "You filled the form out incorrectly!"; 
} 
+1

Verwenden Sie '$ regex = '~^(? =. * \ D) (? =. * [Az]) (? =. * [AZ]). {3,} ~';' - Sie haben das vergessen Trennzeichen. Und ein Anker am Start wäre eine gute Idee. –

+0

Sie sind ein Zauberer Herr, ich schulde Ihnen große Zeit, als ich saß dort starrte auf meinen Code verwirrt und verwirrt, versuchte, getestet und arbeitet Dankeschön Mann –

Antwort

0

Das Hauptproblem sind die fehlenden Trennzeichen, sondern als beste Praxis, es ist auch eine gute Idee, einen ^ Anker hinzuzufügen:

$regex = '~^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}~'; 

Validation regexps in der Regel mit den principle of contrast im Verstand errichtet werden, und Ihre regex ist effizienter, wenn man es umschreiben wie

$regex = '~^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{3,}~'; 

Also, die Regex (in) bestätigt die Eingabe schneller ohne die redundante backtra cking verursacht durch .* in den Lookaheads.

+0

Froh, es hat für Sie gearbeitet. Bitte bedenken Sie auch, dass eine Antwort hilfreich ist, wenn meine Antwort hilfreich für Sie war (siehe [Wie kann ich auf Stack Overflow upvoten?] (Http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) . Nach 15 Wiederholungen sind Sie berechtigt, auf SO zu erhöhen. –

Verwandte Themen