2012-08-08 22 views
8

Me gustaría crear una función preg_match para validar mis passowrds, pero no estoy seguro de cómo escribirlo para permitir el uso de los siguientes caracteres especiales: [email protected]#$% .

if(!preg_match(?????)$/', $password)) 

Aquí están mis reglas de contraseña que yo quiero trabajar en la expresión regular:

  • Puede contener letras y números
  • Debe contener al menos 1 número y 1 letra
  • puede contener cualquier de estos caracteres: [email protected]#$%
  • Debe tener 8-12 caracteres

Gracias por cualquier ayuda que pueda ofrecer.

+2

por favor considere permitir contraseñas más largas, prefiero que el mío tenga más de 20 caracteres, y no le hará daño permitir esto. No entiendo los sitios que tienen una longitud máxima; los almacena en hash, ¿cuál es el problema? –

+0

@Dragon Aumenté el máximo de 50 caracteres. Es un sitio simple y creo que solo estaba pensando en 8-12 caracteres que sería más fácil de recordar para las personas y menos probable que necesiten restablecer su contraseña. Pero como dijiste, con la contraseña cifrada, realmente no es tan importante. –

+0

dejo que lastpass recuerde todas mis contraseñas para mí :-) –

Respuesta

41

creo que esto debe ser similar a lo siguiente:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
} 

Entre inicio ->^
Y final ->$
de la cadena que tiene que haber al menos un número ->(?=.*\d)
y al menos una letra ->(?=.*[A-Za-z])
y tiene que ser un número, una letra o una de las siguientes:! @ # $% ->[[email protected]#$%]
y tiene que haber 8-12 caracteres ->{8,12}

Como usuario557846 comentó su pregunta, también le sugiero que permita más caracteres, normalmente (si uso un máximo) tome al menos 50 :)

por cierto, es posible que desee echar un vistazo a this regex tutorial

+3

Gracias! Esto es trabajo para mí. Y gracias por explicar cada parte de esto. Eso realmente me ayuda a entender esto mejor. También exploré el tutorial que sugirió y que parece un gran recurso para la próxima vez que estoy lidiando con Regex. Y he hecho el máximo de 50 caracteres. –

-1

Busque las clases de caracteres, una característica básica de las expresiones regulares.

+0

Gracias por indicarme la dirección correcta. –

+0

Esto no es una respuesta límite, especialmente en comparación con la respuesta aceptada. Tal vez podrías expandirlo en lugar de decirle a alguien que busque algo. Gracias. – Kev

-1
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
    } 

en la declaración anterior .. lo que sea posible por lo tanto existe la contraseña ?.

+0

por favor ayúdame ... porque ingresé un personaje diferente pero no existe ... "la contraseña no cumple con los requisitos! – christine

+0

if (! Preg_match ('/^(? =. * \ D) (? =. * [A-Za-z]) [0-9A-Za-z! @ # $%] {8,12} $/', $ contraseña)) { echo' la contraseña no cumple con los requisitos! '; } – christine

+0

en la declaración anterior ... cualquier cuerpo puede darme una contraseña que se ajuste a mi "contraseña de preg_match" ... porque ingresé la combinación de contraseña de dffernt pero no puedo enviar ... – christine

6
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[[email protected]#\-_$%^&+=§!\?]{8,20}$/',$password) 
  • al menos un carbón minúsculas
  • al menos un carbón mayúsculas
  • al menos un dígito
  • al menos un signo especial de @ # $%^-_ & + = §! ?
+0

La respuesta de Thomas se explica mejor que la de r3bel. – Alreadytakenindeed

0

He hecho esto con mi formulario personalizado drupal en hook_form_validate aquí la contraseña debe tener 6 caracteres de letras, números y al menos un carácter especial.

<? 
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]{6,15}$/', $form_state['values']['pass'])) { 
    form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.')); 
} 
?> 
1

he desarrollado una expresión regular completa para un bit de control más complejo

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"]{8,50}$/ 

Básicamente comprobar si la contraseña para tener 1 dígito, 1 de capital, 1 inferior y 1 carácter especial. Espero que esto ayude a alguien a buscar una expresión regular.

0
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%] 
{6,15}$/',($_POST['password']))) { 
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.'; 
} 
+0

Deberías ser más claro. –

2

me ha gustado la respuesta de r3bel, así que tenía un juego con él y terminó con la siguiente función de contraseña de comprobación:

function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) { 
    // Build regex string depending on requirements for the password 
    $regex = '/^'; 
    if ($req_digit == 1) { $regex .= '(?=.*\d)'; }    // Match at least 1 digit 
    if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; }   // Match at least 1 lowercase letter 
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }   // Match at least 1 uppercase letter 
    if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; } // Match at least 1 character that is none of the above 
    $regex .= '.{' . $min_len . ',' . $max_len . '}$/'; 

    if(preg_match($regex, $password)) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 

longitudes Max/Min son predeterminado o ajustable, cada requerimiento está preprogramado, pero puede apagarse, y yo quería admitir cualquier símbolo, por lo que el último requisito es "cualquier cosa que no sea uno de los tipos anteriores", en lugar de un conjunto fijo de símbolos.

Cuestiones relacionadas