Te recomendamos que pruebes esta respuesta en un entorno controlado antes de pasarlo a producción, un saludo.
Solución:
Debe pasar un objeto RegExp real a matches
No un string. Simplemente reemplace las comillas dobles con barras diagonales en su esquema de contraseña:
password: yup
.string()
.required('Please Enter your password')
.matches(
/^(?=.*[A-Za-z])(?=.*d)(?=.*[@$!%*#?&])[A-Za-z[email protected]$!%*#?&]8,$/,
"Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and one special case Character"
),
Esto es lo que finalmente me puse a trabajar.
password: Yup.string()
.required('Please Enter your password')
.matches(
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#$%^&*])(?=.8,)/,
"Must Contain 8 Characters, One Uppercase, One Lowercase, One Number and One Special Case Character"
),
Tomé esta expresión regular string de este artículo: https://www.thepolyglotdeveloper.com/2015/05/use-regex-to-test-password-strength-in-javascript/
Bien, después de un par de horas de jugar, decidí hacer mi propia validación personalizada.
Aquí esta lo que hice :-
password: yup
.string()
.required("Please Enter your password")
.test(
"regex",
"Password must be min 8 characters, and have 1 Special Character, 1 Uppercase, 1 Number and 1 Lowercase",
val =>
let regExp = new RegExp(
"^(?=.*\d)(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z]).8,$"
);
console.log(regExp.test(val), regExp, val);
return regExp.test(val);
)
Por ahora, esto está funcionando bien. Pero realmente me gustaría saber por qué aparece el error. Publíquelo como una respuesta si puede encontrar una solución, y si funciona para mí, lo marcaré como la respuesta correcta. Gracias.
Nos puedes añadir valor a nuestro contenido informacional añadiendo tu experiencia en las explicaciones.