Hallo zusammen,
ich möchte mittels eines regulären Ausdrucks überprüfen, ob ein Passwort mindestens drei Zeichen lang ist. Leider funktioniert meine Version nicht, da jeder String zugelassen wird - auch wenn er nur zwei Zeichen lang ist.
So sieht sie aus:
if(!preg_match('~S{3,}~', $var)) foo();
Was mache ich falsch?
‚~S{3,}~‘ matcht jeden String, in dem irgendwo drei oder mehr angrenzende Vorkommen des Buchstabens ‚S‘ auftreten. Du wolltest vermutlich ‚~^\S{3,}$~‘ wie in: drei oder mehr Nicht-Whitespace-Zeichen als einzige zulässige Zeichen zwischen Beginn und Ende des Strings. Falls du in UTF-8 arbeitest, wäre der Unicode-Modifikator noch sinnvoll: ‚~^\S{3,}$~u‘, um zu verhindern, dass ein Multibyte-Character als 2 oder mehr Zeichen angesehen wird.
Auch wahr. Ich habe das „S“ im mitgelieferten regulären Ausdruck als Versuch gelesen, die Charakterklasse \S (die Negation von \s) zu wählen. Das halte ich auch immer noch für relativ logisch. Die Frage ist, ob Whitespace „innerhalb“ von Passwörtern (also nicht vorne oder hinten, die wird man mit trim() rauslöschen) zugelassen sein soll oder nicht. Falls nein, braucht es einen regulären Ausdruck.
Na ja, wie auch immer, alle Alternativen wurden ja nun genannt.