Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/07/2013, 15:39
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Expresión regular para una contraseña

Debe pensarse mas en la "presencia" que en la "posibilidad", suena extraño, lo sé.

Los rangos implican posibilidad mas no presencia, pues al ser un conjunto opcional no hay nada que indique obligatoriedad.

Una forma de controlar la presencia es usando grupos para mirar hacia atrás/adelante, es decir, así:

Código PHP:
Ver original
  1. $test = array('ferTTTgege544454ee', 'ferrTTTTTTTTTTTTT');
  2. $regex = '/^(?:.*(?=[A-Z]).*(?=[a-z]).*(?=[0-9]).*|.*(?=[a-z]).*(?=[0-9]).*(?=[A-Z]).*|.*(?=[0-9]).*(?=[A-Z]).*(?=[a-z]).*|.*(?=[a-z]).*(?=[A-Z]).*(?=[0-9]).*)$/';
  3.  
  4. foreach ($test as $one) {
  5.   if (preg_match($regex, $one)) {
  6.     echo "=> $one PASS!\n";
  7.   }
  8. }

A grosso modo únicamente estoy comparando las permutas de dichos rangos, no es limpio, ni la mejor expresión que se me ocurre, pero al menos resuelve el problema.

Básicamente es un serie de sentencias como "cualquier cosa seguida de [...]", etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.