(RegEx) Pwd-Länge u. mind.2 Zahlen o. Buchstaben

Watusimann

Erfahrenes Mitglied
Hallöle,

Habe nun mehrere Möglichkeiten erprobt und komm noch nicht so ganz klar, mit der Materie.
Ich möchte via RegEx prüfen ob ein Passwort 8 Zeichen lang ist, es aus Zahlen Buchstaben besteht und das PW mindestens 2 Zahlen oder 2 Buchstaben enthält.
/^[a-z0-9]+$/i <- kann nur Buchstaben oder Zahlen enthalten, also nicht für mich geeignet
/^([a-z0-9]?){8}$/i <- das war bisher mein bester Einfall :( aber irgendwie komm ich nicht so ganz dahinter. Habe nun mehrere Tuts dazu gelesen, aber ab einen gewissen Punkt macht sich die Wirrheit in meinem Kopf breit.
Hat jemand einen Ansatz für mich, der evtl. eine kleine Erklärung beinhaltet? Wäre super nett.
Danke schonmal im Voraus.
 
Also mit "[^\W]{2,8}" bekommst du alles was kein Zeichen ist,
ausser "_", aber die Variante mit dem 2 Buchstaben und 2 Zahlen,
da wirst du ohne splitten und zählen nicht alleine mit einem
Regex weiterkommen. Glaube ich, aber ich bin ja nicht allwissend :)
 
Gehe die Zeichenkette lieber Zeichen für Zeichen durch und ordne es einer der Zeichengruppen zu:
PHP:
$strlen = strlen($str);
for( $i=0; $i<$strlen; $i++ ) {
	$char = $str{$i};
	if( strpos('0123456789', $char) !== false ) {
		// Zahl
	} else if( strpos('abcdefghijklmopqrstuvwxyz', $char) !== false ) {
		// Kleinbuchstabe
	} else if( strpos('ABCDEFGHIJKLMOPQRSTUVWXYZ', $char) !== false ) {
		// Großbuchstabe
	} else {
		// anderes Zeichen
	}
}
 
Ou,... und irgendwie hab ich gehofft, das dies geht. Danke Euch beiden. @Gumbo Danke für das Script, ist abissle kürzer als meins, was ich bisher benutzt habe :)

Dank Euch
 
Es ist nur ein Versuch:

PHP:
error_reporting(E_ALL);

$string = '12345678';

// prüfe auf 8 Zeichen
if ( preg_match('/[a-z0-9]{8}/i', $string) ) {
echo '8 Zeichen ok <br>';

  // prüfe auf 2 Buchstaben
  if ( preg_match('/.*[a-z].*[a-z].*/i', $string) ) {
  echo '2 Buchstaben ok <br>';

    // prüfe auf 2 Zahlen
    if ( preg_match('/.*[0-9].*[0-9].*/', $string) ) {
    echo '2 Zahlen ok <br>';
    } else {
    echo 'nicht 2 Zahlen <br>';
    }

  } else {
  echo 'nicht 2 Buchstaben <br>';
  }

} else {
echo 'nicht 8 Zeichen <br>';
}

EDIT:

Oh sehe gerade, hab das wörtchen "oder" übersehen ...
Naja, dann ist es die Varianten mit 8 Zeichen, mind. 2 Zahlen und 2 Buchstaben :)
 
Zuletzt bearbeitet von einem Moderator:
Die erlaubten Zeichen so stark einzuschränken, ist keine gute Idee. Denn je mehr unterschiedliche Zeichen erlaubt sind, desto mehr Kombinationen sind auch möglich, was ein Erraten des Passworts schwieriger macht.
Daher ist es besser nur nach unten eine Grenze zu setzen (Mindestlänge, Mindestentropie, etc.) und den Benutzer gegebenenfalls darauf hinzuweisen, ein stärkeres Passwort zu wählen.
 
Zurück