Expresión regular para validar una contraseña segura

La expresión regular de contraseña sirve para controlar la forma de una contraseña y comprobar que la que te envían es lo bastante fuerte como para resistir los ataques por fuerza bruta de los bots.

Expresión regular para validar una contraseña segura

La expresión regular de contraseña sirve para controlar la forma de una contraseña y comprobar que la que te envían es lo bastante fuerte como para resistir los ataques por fuerza bruta de los bots.

Expresión regular para una contraseña sólida

La expresión regular de abajo comprueba que una contraseña:

  • Tiene 8 caracteres como mínimo. Ajústalo cambiando {8,}

  • Lleva al menos una letra mayúscula. Puedes quitar esta condición eliminando (?=.* ?[A-Z])

  • Lleva al menos una letra minúscula. Puedes quitar esta condición eliminando (?=.* ?[a-z])

  • Lleva al menos una cifra. Puedes quitar esta condición eliminando (?=.* ?[0-9])

  • Lleva al menos un carácter especial. Puedes quitar esta condición eliminando (?=.* ?[#?!@$%^&*-])

javascript
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/

Versión JavaScript

La función recibe la contraseña como parámetro y la compara con la expresión regular. Si no encuentra ninguna coincidencia, la validación falla y la función devuelve false, si la coincidencia funciona, la contraseña tiene el formato correcto y la función devuelve true. Esta es la función JavaScript que valida la contraseña

javascript
/**
 * Valida una contraseña
 *
 * Si la contraseña no es lo bastante segura, devuelve false
 *
 * @param mdp
 * @return Boolean
 */
function validateMDP(mdp){
    var Reg = new RegExp(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/);
    return Reg.test(mdp);
}

Cómo usar la función JavaScript

La forma más sencilla de usarla es dentro de una declaración IF, como aquí abajo.

javascript
if(validateMDP(mdp)){
     alert("Mot de passe  valide");
} else {
     alert("Mot de passe invalide");
}

See the Pen
Valider un email avec une expression régulière
by Damien Flandrin (@dam62500)
on CodePen.0

Versión PHP

php
/*
 * valida contraseña
 * @param $mdp
 */
 function isValidMDP($mdp)
 {
   return preg_match('/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/', $mdp)
 }

Versión HTML

Puedes comprobarlo en HTML, antes de la validación en PHP y JavaScript, con el atributo pattern: te permite destacar con CSS si la contraseña respeta la expresión regular.

html
 <input
      name="mdp"
      type="text"
      pattern="(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}"
     />

See the Pen
Vérifier une date avec une expression régulière en HTML
by Damien Flandrin (@dam62500)
on CodePen.0

Notas sobre la validación de contraseñas con regex

Esta validación con regex es mejor que nada, pero cuando necesites más seguridad conviene comprobar además la contraseña introducida contra una lista de contraseñas de uso habitual, como:

  • .IOlZPf1
  • !A1o2e3r4
  • etc

HTMLJavaScriptPHP

Damien Flandrin Desarrollador web desde 2010, creador de Gekkode y de Email Impact. Cada artículo se prueba en un proyecto real antes de publicarse. Contacto
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.