Reguläre Ausdrücke
lindsey
- php
0 Sven Rautenberg0 lindsey0 Rouven
1 seth_not@home0 lindsey
Also ich versuche einen Regulären Ausdruck zu finden der folgendes überprüft:
Der String muss 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 sein
if(ereg ("([a-z]{2,}|[A-Z]{2,}|[0-9]{2,})",$string) && strlen($string) >= 8) {
}
das ist mein bisheriger Versuch, aber irgendwie macht er nicht das richtige ^^
da ich mit den regulären Ausdrücken noch nicht so zusammenkomme, und ich mit der Suche auch nichts gefunden hab das mir weiterhilft, hoffe ich das hier jemand ist der sich mit regulären Ausdrücken auskennt ^^
mfg lindsey
Moin!
Also ich versuche einen Regulären Ausdruck zu finden der folgendes überprüft:
Der String muss 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 sein
Sowas kann man nach meiner Meinung nicht in _einem_ regulären Ausdruck unterbringen.
Die Stringlänge auf 8 zu prüfen sollte nicht Aufgabe eines regulären Ausdrucks sein - hast du ja auch schon passend eingebaut.
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. 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.
- Sven Rautenberg
ich habe auch schon probiert das ganze mit 3 Ausdrücken zu überprüfen, also
ereg ("[a-z]{2,}|",$string) && ereg ("[A-Z]{2,}|",$string) ....
aber er sucht immer nach 2 Zeichen die hintereinanderstehen, kann man das nicht ändern?
thx, mfg lindsey
Hi,
aber er sucht immer nach 2 Zeichen die hintereinanderstehen, kann man das nicht ändern?
ich kenn mich nicht allzu gut damit aus, aber die Frage ist wie denn die RegExp-Engine das verarbeitet. Selbst wenn es pro Ausdruck nur eine einzelne Schleife wäre, dann wären 3 Ausdrücke 3 Schleifen. Da bist du mit einer Schleife+Zählen um mindestens den Faktor 3 besser bedient...
MfG
Rouven
Sali,
Ist es möglich die Länge des Strings zu prüfen, Ja. (Hehe, sogar ohne Reguläre Ausdrücke :))
Ist es möglich das Vorkommen von 2 Ziffern zu prüfen? Ja.
Das Pattern "\d" muss auf den String angewendet mindestens
zwei Matches bringen. Oder?
Wie sieht es mit [A-Z] als Pattern bei Pühapü-Regulären Ausdrücken aus?
Sollte auch wieder 2 Matches bringen, wenn zwei Grossbuchstaben drin sind. Oder?
Und wozu Schleifchen? Die gehören in die Haare. :)
Ciao, Frank
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
(hab's nicht getestet, bin aber der meinung, dass das so funzen sollte.)
das tut es auch!
danke! genau das was ich gesucht hab ^^
mfg lindsey