Preg_match Ausdruck zusammensetzen

BLR

Erfahrenes Mitglied
Hallo Leute,

hier gabs schon mal mind. ein Thema über preg_match.
Ich habe zwar das Pattern für die jeweiligen Kriterien, aber ich kann sie nicht zusammensetzen.
Bedienung:
Es müssen alle 4 Bedienungen erfüllt werden: Ein Sonderzeichen, ein Kleinbuchstabe, ein Großbuchstabe, eine Zahl drin sein.

Pregmatch für Kleinbuchstabe, Großbuchstabe, eine Zahl:
1.
PHP:
preg_match('/^[a-zA-Z0-9]{5,20}$/',$wort)
2.
Pregmatch für alle Sonderzeichen habe ich 2 Möglichkeiten:
a)
Code:
preg_match('/[[:punct:]]/',$wort)
oder
b)
Code:
preg_match('/[\W]/',$wort)

Wenn ich jetzt 1. und 2. (Variante a oder b) auf folgenden Ausdruck anwende: ==> 1AaBb#
PHP:
preg_match('/^[a-zA-Z0-9\W]{5,20}$/',$wort)
oder
PHP:
preg_match('/^[a-zA-Z0-9[[:punct:]]]{5,20}$/',$wort)
oder
Code:
preg_match('/^[a-zA-Z0-9[:punct:]]{5,20}$/',$wort)
funktioniert das nicht mehr.

Danke für jeden Tipp
 
Code:
^(?=.*[^[:alnum:]\s])(?=.*[[:upper:]])(?=.*[[:lower:]])(?=.*\d)\S{5,20}$
(?=...) besagt, dass der folgende Text die Bedienung in der Klammer erfüllen muss.
Die Bedinnung beginnt mit dem ersten Text nach der Klammer. Darum muss auch das .* drin sein, damit die Bedinnung erst in den folgenden Zeichen erfüllt werden kann.
Es ist ein sogenannter "positive lookahead"

(?=.*[^[:alnum:]\s]) Es muss ein Zeichen vorhanden sein, dass kein Buchstabe, keine Ziffer und kein Leerzeichen ist
(?=.*[[:upper:]]) Es muss ein Grossbuchstabe vorhanden sein
(?=.*[[:lower:]]) Ein Kleinbuchstabe
(?=.*\d) Eine Zahl
\S{5,20} Das Ganze muss zwischen 5 und 20 Zeichen lang sein und darf kein Leerzeichen (inkl. Tabs etc) sein
 
Vielen Dank für deine sehr gut Erklärung.
Ich habe jetzt einen Folgeproblem, aber das gehört nicht mehr hierrein :)
 

Neue Beiträge

Zurück