gudn tach!
Der String muss [mind.] 8 zeichen lang sein.
es müssen mindestens 2 grossbuchstaben enthalten sein
es müssen mindestens 2 kleinbuchstaben enthalten sein
es müssen mindestens 2 ziffern enthalten seinSowas kann man nach meiner Meinung nicht in _einem_ regulären Ausdruck unterbringen.
doch es geht, und zwar mit vielen oder-verknuepfungen oder mit hilfe von zero-width positive look-aheads:
/(?=.*[A-Z].*[A-Z])(?=.*[a-z].*[a-z])(?=.*\d.*\d)/
mit laengenpruefung:
/(?=.*[A-Z].*[A-Z])(?=.*[a-z].*[a-z])(?=.*\d.*\d).{8,}/
(hab's nicht getestet, bin aber der meinung, dass das so funzen sollte.)
Die Stringlänge auf 8 zu prüfen sollte nicht Aufgabe eines regulären Ausdrucks sein
kommt darauf an. was in diesem fall besser (schneller in der ausfuehrung) waere, weiss ich nicht. schneller getippt ist jedenfalls ".{8,}".
Und das Prüfen auf enthaltene Zeichen in passender Stückzahl und insbesondere in beliebiger Reihenfolge ist mit regulären Ausdrücken nur schwierig darstellbar.
kommt auf die genauen anforderungen an. in diesem fall find ich es noch recht ueberschaubar.
Ich würde stattdessen empfehlen, den String Zeichen für Zeichen durchzugehen, jedes Zeichen auf Zugehörigkeit zu einer deiner drei Kategorien zu prüfen (Vergleich des ASCII- oder Unicode-Codes) und das einfach zu zählen - wenn hinterher alle drei Zähler größer als 2 sind, ist deine Bedingung erfüllt.
und wenn man das geschickt anstellt, sollte es auch schneller sein als der reg. ausdruck.
prost
seth