angular - Angular 8 中的动态密码验证器
问题描述
嗨,我有一个返回数组对象 passwordPolicy 的 api,其中包含
PasswordMinLength: 6
passwordMinLowerCase: 1
passwordMinNumber: 1
passwordMinSymbol: 0
passwordMinUpperCase: 1
数字可以根据用户的角色不断变化,例如它可以是
PasswordMinLength: Password min length.
PasswordMinLowerCase: This is currently either 0 or 1 So, if it's returning 1 for example it should have 1 minimum lower case. If it's returning 0 then the check should be ignored for lower case.
PasswordMinUpperCase: Same as above for upper case requirement.
PasswordMinSymbol: Same as above for symbol.
PasswordMinNumber: same as above to determine if a number is required in the password.
我知道我们可以使用正则表达式模式验证进行验证,请参见下面的 如何使用 Angular 5 验证器模式验证密码强度
但是当数据不断变化时如何动态地实现验证。
我需要验证 newpwdctrlname。
resetPwdForm: FormGroup = new FormGroup({
newpwdctrlname: new FormControl('', [Validators.required, Validators.minLength(6)]),
shownewpwdctrlname: new FormControl('', []),
rptpwdctrlname: new FormControl('', [Validators.required])
});
解决方案
您可以使用字符串插值动态生成模式
就像是
passRequirement = {
passwordMinLowerCase: 1,
passwordMinNumber: 1,
passwordMinSymbol: 2,
passwordMinUpperCase: 1,
passwordMinCharacters: 8
};
pattern = [
`(?=([^a-z]*[a-z])\{${this.passRequirement.passwordMinLowerCase},\})`,
`(?=([^A-Z]*[A-Z])\{${this.passRequirement.passwordMinUpperCase},\})`,
`(?=([^0-9]*[0-9])\{${this.passRequirement.passwordMinNumber},\})`,
`(?=(\.\*[\$\@\$\!\%\*\?\&])\{${this.passRequirement.passwordMinSymbol},\})`,
`[A-Za-z\\d\$\@\$\!\%\*\?\&\.]{${
this.passRequirement.passwordMinCharacters
},}`
]
.map(item => item.toString())
.join("");
resetPwdForm = this.fb.group({
newpwdctrlname: ['Passwod1@@5', [Validators.required, Validators.pattern(this.pattern)]],
shownewpwdctrlname: ['', []],
rptpwdctrlname: ['', [Validators.required]]
});
constructor (private fb: FormBuilder) {}
然后,您可以将其用作
Validators.pattern(this.pattern)
在 Stackblitz 上查看此演示
推荐阅读
- watson-studio - Watson Studio - 关于特征评估和获取已保存模型的测试/训练数据的模型构建器问题
- c - 在 STM32 上处理图像 - C
- android - Google Play 计费库 2.0 确认测试购买的购买时间限制
- apache-spark - spark 独立集群模式下的 spark.driver.cores 设置
- sql - 合并和 nullif 来处理子字符串和空值
- javascript - 我想删除 div 元素而不用 js 更改任何 html 代码
- java - 获取百分比符号时如何避免 UnsupportedOperationException?
- javascript - 如何通过 Ajax 获取请求从 Express 路由获取用户数据?
- python - 如何正确执行 repo 中每个 python 文件的代码覆盖?
- javascript - 为什么我无法访问侦听器函数中的变量 i?