我正在尝试为密码字段制定验证规则,它应包含以下内容:
- 必须有号码
- 必须至少包含一个大写字母
- 必须包含至少一个小写字母
- 必须包含以下任何符号 [@$!]
- 长度应仅为 8 到 20 个字符。
这是我使用的正则表达式模式:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!#.])[A-Za-z\d$@$!%*?&.]{8,20}
测试于https://regexr.com/ https://regexr.com/
这是 Joi 验证:
password: Joi.string()
.regex(
'/(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!#.])[A-Za-zd$@$!%*?&.]{8,20}/'
)
.required()
.min(8)
.max(20)
错误堆栈跟踪:
{ AssertionError [ERR_ASSERTION]: pattern must be a RegExp
at internals.String.regex (E:\nodeprojects\voting-system\voting-server\node_modules\joi\lib\types\string\index.js:120:14)
at Object.<anonymous> (E:\nodeprojects\voting-system\voting-server\src\routes\user.js:16:6)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Module.require (module.js:593:17)
at require (internal/module.js:11:18)
at files.map (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\lib\auto-route.js:21:27)
at Array.map (<anonymous>)
at Object.module.exports.getRoutes (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\lib\auto-route.js:19:18)
at Object.register (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\index.js:16:32)
at <anonymous>
generatedMessage: false,
name: 'AssertionError [ERR_ASSERTION]',
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==' }
我知道已经过去了大约两年,但我认为迟到总比不来好????????。
你只需要将图案放入RegExp()
这就是我编辑你的代码的方式:)
const pattern = "/(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!#.])[A-Za-zd$@$!%*?&.]{8,20}/";
password: Joi.string()
.regex(RegExp(pattern)) // you have to put it in this way and it will work :)
.required()
.min(8)
.max(20)
我希望它能帮助你!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)