2011-05-31 10 views
13

Quiero comprobar si el usuario ha cumplido con éxito los siguientes requisitos:Cumplimiento de Requisitos de contraseña

  • La contraseña tiene al menos 8 caracteres
  • consiste en una capital & una letra minúscula

¿Cómo haría esto?

estoy usando el script PHP a continuación:

if (strlen($password) < 8) { 
    false 
} else { 
    if (preg_match("/[^0,9]/", $password)) { 
    // how to check the upper case and lower case 
    } 
} 
+3

Bienvenido a Stackoverflow! Excelente primera pregunta. – Sampson

+0

¿la contraseña necesita tener números en ella? –

Respuesta

3

Uso preg_match("/[A-Z]/") y preg_match("/[a-z]/")

0
preg_match('/[a-z]/', $password) && preg_match('/[A-A]/', $password) 
1
if (
    strlen($password) >= 8) && 
    preg_match('/[A-Z]/', $password) > 0 && 
    preg_match('/[a-z]/', $password) > 0) 
{ 
    /* Password validation passes, do stuff. */ 
} 
else { 
    /* Password validation fails, show error. */ 
} 
+0

No * tiene * para incluir el "> 0", pero como preg_match devuelve un número entero y no un valor booleano, prefiero probar explícitamente esta condición en caso de que alguna vez la cambie más adelante. –

2
if(strlen($password) < 8) { 
    return false; 
} 
if(preg_match("/[^0,9]/", $password)) { 
    how to check the upper case and lower case 
} 
if($password == strtoupper($password) || $password == strtolower($password)){ 
//pass fails because its either all upcase, or lowercase 
} 
1

Puede utilizar trim, que en realidad es mucho más rápido que expreg

if (trim($password, 'a..z') != '' && trim($password, 'A..Z') != '' && strlen($password) >= 8) 
{ 
    /* Password validation passes, do stuff. */ 
} 
else { 
    /* Password validation fails, show error. */ 
} 
+0

su primer caso pasará aunque el pase sea más bajo y sin números. El segundo caso no pasará si el pase tiene números –

+0

ahora lo validará incluso si no tiene números y solo letras mayúsculas y minúsculas –

+0

@Tudor Constantin: OP no dijo nada sobre los números –

9

Usted puede hacer eso con una expresión regular:

if (!preg_match('/^(?=[a-z])(?=[A-Z])[a-zA-Z]{8,}$/', $password)) 
{ 
    //error 
} 
2

Usted puede usar una técnica de clasificación contraseña:

$x = "[email protected]#$"; 
$rank = Array(); 


$rank['length'] = strlen($x); 

$matches = Array(); 
preg_match_all("/([a-z]+)/", $x, $matches); 
$rank['lowercase'] = strlen(implode('', $matches[0]))/count($matches[0]); 

$matches = Array(); 
preg_match_all("/([A-Z]+)/", $x, $matches); 
$rank['uppercase'] = strlen(implode('', $matches[0]))/count($matches[0]); 

$matches = Array(); 
preg_match_all("/([0-9]+)/", $x, $matches); 
$rank['numbers'] = strlen(implode('', $matches[0]))/count($matches[0]); 

$matches = Array(); 
preg_match_all("/([^a-zA-Z0-9]+)/", $x, $matches); 
$rank['symbols'] = strlen(implode('', $matches[0]))/count($matches[0]); 


echo "<pre>"; 
var_dump($rank); 
echo "</pre>"; 
+0

Cuando no se usa uno, devuelve un error sobre dividir por 0 debido a la función '/ count()'. ¿Alguna idea de arreglar esto sin un lío de código? – Tarquin

+0

@Tarquin: ¿por qué no usar simplemente if/else's? No estoy seguro de lo que quiere decir con "lío de código" – Quamis

+0

gracias por su respuesta! Me costaba aplicar si o no, lo que debería comprobar como '$ matches' y' $ matches [0] 'ambos devuelven solo 'Array' - traté de usar algunos otros también pero no pude obtener resultados. --- Terminé llamando a la función como '@function_name()' para suprimir los errores y usé un if/else para establecer las variables vacías a 0 como solución de parche. – Tarquin

Cuestiones relacionadas