Hallo Matze,
Eigentlich will ich mir genau das ersparen und trotzdem ein halbwegs vernünftiges Passwort "erzwingen". Also wirklich nur "Müll" raus filtern.
statt (hier Deine Version aus
# Wenn String nur aus einem Zeichen besteht
# Stringlänge ermitteln
$length = strlen($string);# Leeres Array erstellen
$chars = array();# Einzelne Zeichen in Array aufsplitten
$chars = str_split($string);# einzelne Buchstaben auslesen bis Arrayende, $i auf ersten Schlüssel (0) setzen
for($i = 0; $i < $length; $i++){# Kontrollvariable beim ersten Durchlauf auf aktuelles Zeichen setzen
if(!isset($charold)) $charold = $chars[$i];# wenn Kontrollvariable = aktuelles Zeichen
if($chars[$i] == $charold){
# Fehlervariable auf 1 setzen (beim ersten Durchlauf)
$bad_pwd = '1';
}else{
# wenn Kontrollvariable nicht dem aktuellen Zeichen entspricht
# Fehlervariable auf 0 setzen
$bad_pwd = '0';
# Schleife beenden
$i = $length;
}
}
# Fehlervariable übergeben
if($bad_pwd == '1') $error = '5';
> > arbeitet bestimmt nicht korrekt, ich verstehe ehrlich gesagt überhaupt nicht, was das soll. Kommentiere Deinen Code!
>
> So besser? Wenn die Schleife, ohne das $bad\_pwd auf 0 gesetzt wird weil ein neues Zeichen auftritt, beendet oder durchlaufen wird sind mindestens 2 verschiedene Zeichen im String. Aber wieso ist er nicht fehlerfrei?
Hmm ja, scheint zu funktionieren, ist aber umständlich und schwer nachzuvollziehen.
Verbesserungsvorschläge:
a) Initialisiere Dein $charold von vornherein mit $chars[0]
b) Beginne die Schleife daher mit $i = 1
c) Nutze zum Abbruch die Anweisung [break](http://www.php.net/manual/de/control-structures.break.php)
Nur als Grundideen für vergleichbare Fälle.
> > Ach ja, ich halte es für eine gute Idee, die einzelnen Prüfungen in hübsche kleine einzelne und gut testbare Funktionen zu packen.
>
> hmpf, deshalb war im Ausgangspost auch nur der eine Teil ;)
ja - und genau deswegen hättest Du Dein Konzept im Ausgangspost vorstellen
sollen. Verstehst Du, der geneigte Leser weiß nichts von Deinem Gesamtkonzept.
> Ich versuch mich jetzt noch an einer Abfrage um z.B. "4321" zu unterbinden.
> Ich such grad eine Funktion um heraus zu kriegen wieviel Schlüssel ein Array hat. Nicht schlagen, ich hab Arrays irgendwie echt vernachlässigt.
>
> Wie ich "dcba" vermeiden kann weiß ich noch nicht.
Beides geht gleich:
Prinzipiell genauso wie aufsteigende Folgen. Nutze den Dekrementoperator :-)
Alternative: Kehre die Zeichenkette (bzw. das Array) um und prüfe auf aufsteigend ...
Eine Anmerkung noch zum Schluss:
Die Überprüfung auf Stärke eines Passwortes ist nicht besonders häufig erforderlich. Die Geschwindigkeit der Prüfung ist meiner persönlichen Meinung nach völlig irrelevant.
Freundliche Grüße
Vinzenz