Hallo,
Huh? Mir fällt im Moment auf Anhieb keine Software ein, die Leerzeichen in Passwörtern *nicht* erlauben würde. Klar, sowas gibt's sicherlich, bin ich auch sicher schonmal begegnet, aber das dürfte die *absolute* Ausnahme sein.
das finde ich aber nicht klug. So kann man aus einem 10 stelligen String bequem einen 5 stelligen machen. Ob das im Sinne der Überlegung ist, einen mindestens 6 stelligen String vorzuschreiben weiß ich nicht. Andererseits könnte man das Leerzeichen auch durch jedes beliebige andere Zeichen ersetzen und dann wär es wieder egal. Was soll ein Unterschied sein zwischen "t e s t" und "t1e1s1t"? Ich hab die Überprüfung nach Leerzeichen raus genommen.
Ich könnte mich allerdings auch an keinen Fall erinnern wo ich Leerzeichen verwende. (wo erlaubt kann ich nicht sagen, ich benutze keine PWs mit Leerzeichen)
Danke für deinen Hinweis!
Ich bin gerade dabei ein komplettes Login-Script mit der diskutierten Funktion zu schreiben. Wenn ich fertig bin, stelle ich es mal online.
Die Funktion eignet sich ja nicht nur zur Überprüfung von Passwörtern, sondern auch Benutzernamen, Straßennamen usw. Eigentlich jeder Art Daten die irgendwie Sinn ergeben sollen.
Und da könnte sie später vielleicht doch mal dem ein oder anderem nützen.
Die Funktion soweit (erfolgreich getestet aber nicht kommentiert)
function good_string($string, $minlength, $maxlength, $refstring = NULL){
# Stringlänge ermitteln
$length = strlen($string);
# String in Array aufsplitten
$chars = array();
$chars = str_split($string);
# Wenn String zu kurz oder zu lang
if(strlen($string) < $minlength || strlen($string) > $maxlength) $error = '1';
# Wenn String = Referenzstring (z.B. Passwort = Name)
if(strtolower($string) == strtolower($refstring)) $error = '2';
# Wenn String nur aus einem Zeichen besteht z.B. "1111", "aaaa"
if(count(array_unique(str_split($string))) == 1) $error = '3';
# Wenn String aufsteigender Folge ist z.B. "1234", "abcd"
for($i = 0; $i < $length; $i++){
if(!isset($charold)){
$charold = $chars[$i];
}else{
$charold++;
}
if($chars[$i] == $charold){
$bad_pwd = '1';
}else{
$bad_pwd = '0';
break;
}
}
if($bad_pwd == '1') $error = '4';
# Wenn String in absteigender Folge ist z.B. "4321", "dcba"
$flipchars = array_reverse($chars);
for($i = 0; $i < $length; $i++){
if(!isset($char)){
$char = $flipchars[$i];
}else{
$char++;
}
if($flipchars[$i] == $char){
$bad_pwd = '1';
}else{
$bad_pwd = '0';
break;
}
}
if($bad_pwd == '1') $error = '5';
# Wenn String leer
if(empty($string)) $error = '6';
# Wenn kein Fehler gefunden wurde
if(!isset($error)) $error = '0';
# Errorstatus zurück geben
return $error;
}
Ich hab auch so meine Mühe mit der Kommentierung, ich weiß immer nicht genau was ich schreiben soll. Nur eine Übersetzung von z.B. empty, if, else halte ich für sinnfrei.
Grüße, Matze