viernes, 8 de julio de 2022

Expresión regular Contraseña

NOTA: Recuerden que si requieren ayuda con alguna Expresión regular, me pueden escribir y los apoyo sin problema.

Y ahora el orgullo de mis Expresiones regulares, la validación de una contraseña (Abajo explico cómo funciona, y cómo podrían modificarlo a su conveniencia):

^[@#$%^\&\+=\dA-ZÑa-zñ]{0,}((([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+)|([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+)|([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+)|([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+)|(\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+)|([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+)|([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|(((\d+[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=])|([a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+)|(\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+)|(\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+)|([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+)|(\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,})|((([@#$%^\&\+=]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}\d+)|(\d+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[@#$%^\&\+=]+))[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[A-ZÑ]+[@#$%^\&\+=\dA-ZÑa-zñ]{0,}[a-zñ]+)[@#$%^\&\+=\dA-ZÑa-zñ]{0,}$

NOTA: Es requerido poner una expresión extra para validar la longitud: (Se puede poner en una sola, pero asíes un poco más entendible)
.{8,50} <--- Esta valída únicamente la longitud de 8 a 50 caracteres.

Esta validación toma como premisa que se requiere un mínimo de:

    1.- Una mayúscula
    2.- Una minúscula
    3.- Un número
    4.- Un caracter especial

Pero ¿Por qué está tan grande esta validación con respecto a las demás validaciones "Del mercado"?
Fácil, esta ER validan las 16 permutaciones posibles(Básicas necesarias), es decir, tomando en cuenta que cada número es uno de lo que representa en el punto anterior, se vería así:

    1 3 4 2
    3 1 2 4
    2 3 4 1
    ...

En esta expresión se toma como razonamiento principal las 16 permutaciones posibles de los 4 tipos de caracteres, pero no necesariamente lleva ese orden, puede llevar entre cada segmento N cantidad de caracteres, si tomamos que WWW, XXX, YYY, ZZZ y AAA pueden ser 1 o más veces los caracteres básicos, pero siempre existiendo los 4 básicos.
    WWW 1 XXX 3 YYY 4 ZZZ 2 AAA
    WWW 3 XXX 1 YYY 2 ZZZ 4 AAA
    WWW 2 XXX 3 YYY 4 ZZZ 1 AAA

Para poder hacer el cambio de caracteres a los que uno desee, lo ideal es realizar un "replace" de los siguientes caracteres:

    1.- Una mayúscula [A-ZÑ] (Se puede agregar ÁÉÍÓÚÜ o quitar la Ñ)
    2.- Una minúscula [a-zñ] (Se pueden agregar áéíóúü o quitar la ñ)
    3.- Un número \d (Se puede sustitur por alguna expresión que no acepte algunas sucesiones
    4.- Un caracter especial [@#$%^\&\+=] (Se pueden sustituir, agregar, quitar o cambiar los caracteres) (Tomen en cuenta no aceptar caracteres como: ' ,ya que puede ser un riesgo de seguridad para sus Bases de datos)

NOTA: En algunos lenguajes se requiere escapar algunos caracteres, por ejemplo:
\\ en lugar de \
& en lugar de &

Con esta Expresión regular se ahorra procesamiento al querer validar una contraseña, y líneas de código, ya que tendría que hacerse una serie de validaciones y recorridos de cadena para saber si cumple con los requerimientos mínimos.

No hay comentarios:

Publicar un comentario