如何使用express-validator npmvalidation密码

我正在使用节点编写rest API,表示web模块。 为了validation,我使用了express-validator npm。 我想在密码字段上应用一些validation规则。

我如何使用express-validator来实现它?

我要申请密码的validation规则如下:

  1. 最小8字长。
  2. 至less有一个大写字母。
  3. 至less有一个小写字母。
  4. 至less有一个特殊字符。

我在这个链接中读到有一个函数叫做regex() 。 所以我尝试了,但没有工作。

我的方法是:

req.check("password", "Password should be combination of one uppercase , one lower case, one special char, one digit and min 8 , max 20 char long").regex("/^(?=.*\d)(?=.*[az])(?=.*[AZ])[0-9a-zA-Z]{8,}$/", "i"); 

错误

在这里输入图像描述

express-js中列出了所有的方法,但没有find解决我的问题的方法/技巧。

你指的链接已经快3年了。 此后, validator的API发生了变化。

要检查正则expression式,请使用.matches()

 req.check("password", "...").matches(/^(?=.*\d)(?=.*[az])(?=.*[AZ])[0-9a-zA-Z]{8,}$/, "i"); 

可能会迟到的部分

https://github.com/mlabieniec/complexity

这有一个很好的解决scheme来build立RegEx

select的答案是不完整的,因为它缺less对特殊字符的validation。 正确答案应该是:

req.checkBody("password", "Password must include one lowercase character, one uppercase character, a number, and a special character.").matches(/^(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[^a-zA-Z0-9]).{8,}$/, "i");

唯一真正的区别是,我添加了(?=.*[^a-zA-Z0-9])expression式,以确保用户正在使用不是数字或字母的字符。

我相信答案已经过时了。 RegExp和express-validator并不是validation密码的最佳方法,因为正则expression式的模糊使得应用程序不可维护,容易出错。

密码validation器可以很容易地定义密码规则并进行维护。 这是一个示例:

 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 

PS:我是密码validation程序的作者。

Interesting Posts