Este artículo ha sido evaluado por nuestros expertos así se asegura la exactitud de nuestro tutorial.
Solución:
El enlace al que te refieres tiene casi 3 años. Desde entonces, la API de validator
cambió.
Para comparar con una expresión regular, utilice .matches()
:
req.check("password", "...").matches(/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]8,$/, "i");
Creo que la respuesta aceptada está desactualizada. RegExp y express-validator no son las mejores formas de validar contraseñas en 2017, ya que la oscuridad de las expresiones regulares hace que la aplicación no se pueda mantener y sea propensa a errores.
El validador de contraseñas facilita la definición de reglas de contraseñas y su mantenimiento. Aquí hay una muestra:
var passwordValidator = require('password-validator');
var schema = new passwordValidator();
schema
.is().min(8)
.is().max(100)
.has().uppercase()
.has().lowercase();
console.log(schema.validate('notvalid'); // => false
PD: Soy el autor del validador de contraseñas.
La respuesta elegida está incompleta ya que le falta la validación de los caracteres especiales. La respuesta correcta debería ser:
req.checkBody("password", "Password must include one lowercase character, one uppercase character, a number, and a special character.").matches(/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).8,$/, "i");
La única diferencia real es que agregué el (?=.*[^a-zA-Z0-9])
expresión que asegura que un usuario está usando un carácter que no es un número o una letra.
valoraciones y comentarios
Si piensas que te ha resultado de provecho nuestro post, sería de mucha ayuda si lo compartes con más programadores de esta forma contrubuyes a dar difusión a nuestra información.