Regex para contraseña segura

Usa /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/ para comprobar que una cadena completa es una contraseña segura válida. Cada ejemplo de abajo se ha probado con el patrón, y puedes abrirlo en el Probador de Regex con las muestras ya cargadas.

Actualizado el

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/
Abrir en el Probador de Regex
EntradaResultado
Passw0rd!✓ Coincide
C0rrect-Horse✓ Coincide
aB3$efgh✓ Coincide
password✗ No coincide
Password1✗ No coincide
Sh0rt!✗ No coincide
ALLCAPS123!✗ No coincide

Cómo funciona el patrón

ParteSignificado
(?=.*[a-z])Lookahead: al menos una letra minúscula en algún punto
(?=.*[A-Z])Al menos una letra mayúscula
(?=.*\d)Al menos un dígito
(?=.*[^A-Za-z0-9])Al menos un símbolo
.{8,}Ocho o más caracteres en total

Ejemplos de código

JavaScript

const re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}', value))

PHP

preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/', $value) === 1;

Notas y limitaciones

Cada lookahead comprueba una regla sin consumir caracteres, así que las reglas pueden aparecer en cualquier orden. La guía actual del NIST prefiere la longitud (15 o más caracteres) y la comprobación frente a contraseñas filtradas en lugar de las reglas de composición: considera una regla basada solo en la longitud, junto con un medidor de fortaleza. Genera una con el Generador de contraseñas.

Preguntas frecuentes

¿Cuál es la regex para contraseña segura?
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,}$/ — coincide con la cadena completa. Consulta la tabla de arriba para ver qué hace cada parte.
¿Qué ejemplos coinciden?
De los ejemplos probados, coinciden estos: Passw0rd!, C0rrect-Horse, aB3$efgh. Los demás no.
¿Cómo pruebo esta regex?
Haz clic en “Abrir en el Probador de Regex”: el patrón, los flags y el texto de muestra se cargan automáticamente, y las coincidencias se resaltan mientras editas.