Contenido del curso

Validar contraseñas en MongoDB con regex

Resumen

¿Cómo se valida una contraseña segura en MongoDB usando expresiones regulares? La respuesta está en combinar el esquema de validación con un pattern que defina exactamente qué caracteres y qué longitud debe tener el campo. Esta técnica te sirve si trabajas en backend y necesitas reglas estrictas antes de guardar un documento.

¿Qué es una expresión regular y por qué usarla en MongoDB?

Una expresión regular es un patrón de texto que describe qué forma debe tener un string. En MongoDB la usamos dentro del esquema para reforzar la validación más allá del tipo de dato.

No basta con decir que un campo es string. Si quieres una contraseña con mayúsculas, minúsculas, números y un mínimo de ocho caracteres, necesitas un patrón. Y aquí viene lo interesante: ese mismo patrón funciona en JavaScript, Python, PHP y hasta en la terminal cuando buscas archivos.

¿Qué es una expresión regular? Es una secuencia de caracteres que define un patrón de búsqueda o validación sobre texto. Te permite verificar formatos como emails, teléfonos o contraseñas con una sola línea.

¿Cómo defino el pattern dentro del esquema de la colección?

Dentro de la propiedad del campo, junto al tipo string, agregas la palabra clave pattern y le pasas la expresión regular como texto plano [02:08]. Si encuentras la regex escrita con barras /.../, simplemente las quitas y la envuelves entre comillas.

Para la colección de users, el campo password queda así:

js password: { bsonType: "string", pattern: "^[A-Za-z0-9]{8,}$" }

Desglosemos cada parte de ese patrón:

  • ^ marca el inicio del string.
  • [A-Za-z0-9] permite letras mayúsculas, minúsculas y dígitos del 0 al 9.
  • {8,} exige mínimo ocho caracteres y deja el máximo abierto.
  • $ marca el final del string.

La coma sin segundo número en {8,} significa "de ocho en adelante, sin tope". Si quisieras un rango cerrado, podrías escribir {8,100}.

¿Cómo pruebo la validación con una inserción real?

Primero borras el esquema anterior con un drop de la colección users, luego corres la nueva definición con el pattern incorporado [04:33]. A partir de ahí cada documento que insertes pasa por el filtro.

Prueba con un documento mínimo que cumpla los campos obligatorios: email, password y role. Si mandas una contraseña corta como Abc123, MongoDB responde con documento inválido porque rompe la regla de los ocho caracteres [05:50]. Cuando subes la contraseña a algo como Nicolas123, la inserción pasa sin problema.

¿Por qué MongoDB devuelve "documento inválido"? Porque al menos un campo no cumple con el esquema definido. Puede ser el tipo, un enum o, como en este caso, el pattern de la expresión regular.

¿Qué otros campos puedo validar con regex?

El mismo enfoque aplica a cualquier string con formato predecible. Algunos ejemplos prácticos:

  • Números telefónicos con prefijo de país.
  • Direcciones de correo con dominio específico.
  • Códigos postales o identificaciones nacionales.
  • Slugs de URL con guiones y minúsculas.

Esto convierte tu base de datos en una capa extra de seguridad, no solo en un almacén pasivo.

¿Por qué las expresiones regulares son una habilidad transversal?

Lo aprendido aquí no se queda en MongoDB. Una misma regex puede correr en el frontend para validar un input de formulario, en Python para parsear logs, en PHP para limpiar datos o en la terminal para buscar archivos por nombre.

Un detalle importante sobre seguridad: guardar la contraseña en texto plano no es seguro. La regex valida el formato, pero la encriptación es otra capa que aprenderás en cursos de autenticación y backend. Aquí el foco está en que domines el patrón.

Los conceptos clave que dejaste sobre la mesa son: validación con pattern en esquemas de MongoDB [02:08], cuantificadores como {8,} para definir longitudes mínimas, anclas ^ y $ para delimitar el string completo, y la transversalidad de las regex entre lenguajes y entornos.

¿Ya habías usado expresiones regulares antes de esta clase? Cuéntame en los comentarios en qué contexto las aplicaste y qué patrón te costó más construir.