angular 8中的动态密码验证程序

angular 8中的动态密码验证程序,angular,angular8,angular-reactive-forms,angular-validation,angular-validator,Angular,Angular8,Angular Reactive Forms,Angular Validation,Angular Validator,嗨,我有一个api,它返回一个数组对象passwordPolicy,其中包含 PasswordMinLength: 6 passwordMinLowerCase: 1 passwordMinNumber: 1 passwordMinSymbol: 0 passwordMinUpperCase: 1 根据用户角色的不同,数字可能会不断变化,例如 PasswordMinLength: Password min length. PasswordMinLowerCase: This is curren

嗨,我有一个api,它返回一个数组对象passwordPolicy,其中包含

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.
我知道我们可以使用正则表达式模式进行验证,如下所示

但是如何在数据不断变化时动态地实现验证

我需要验证newpwdtrlname

resetPwdForm:FormGroup=newformgroup({
newpwdtrlname:newformcontrol(“”,[Validators.required,Validators.minLength(6)],
shownewpwdctrlname:new FormControl(“”,[]),
rptpwdtrlname:newformcontrol(“”,[Validators.required])
});

您应该在验证器数组中使用正则表达式

以下是如何在Angular中使用正则表达式的示例:

导出类TestComponent实现OnInit{
私人电话模式='([0-9]{3})[-]([0-9]{3})[-]([0-9]{4});
私人电子邮件模式='[a-z0-9.z%+-]+@[a-z0-9.-]+[a-z]{2,4}';
公用电话:FormControl=新建FormControl(
'',
[Validators.required,Validators.pattern(this.phonePattern)]
);
公共电子邮件:FormControl=新建FormControl(
'',
[Validators.required,Validators.pattern(this.emailPattern)]
);
public ngOnInit():void{}
}
您还可以检查以下内容:

编辑 下面是一个关于如何做到这一点的示例:

导出类TestComponent实现OnInit{
私有密码MinLength:number=6;
私有密码MinLowercase:number=1;
私有密码minnumber:number=1;
私有密码MinSymbol:number=0;
私有密码minuppercase:number=1;
私有密码模式:字符串;
公共密码:FormControl=新FormControl(
'',
[Validators.required,Validators.pattern(this.passwordPattern)]
);
public ngOnInit():void{
this.passwordPattern=(
PasswordMinLength?REGEXString:'。'+
passwordMinLowerCase?正则字符串:“”+
passwordMinNumber?REGEXString:“”+
passwordMinSymbol?正则表达式字符串:“”+
passwordMinUpperCase?REGEXString:“”
);
}
}
试试这个

在角色更改时更改关联的验证器

import { CustomValidators } from 'ng2-validation';
    //add or remove validator dynamically

    onRoleChange($role ){
    if(role == 'admin')
   { this.resetPwdForm.get('newpwdctrlname').setValidators([Validators.min(3),Validators.required]);
}
else if(role == 'not admin'){
this.resetPwdForm.get('ewpwdctrlname').setValidators([Validators.required, Validators.pattern('<Pattern>'), CustomValidators.equalTo(password]);
}

    }
从“ng2验证”导入{CustomValidators};
//动态添加或删除验证程序
onRoleChange($role){
如果(角色=='admin')
{this.resetPwdForm.get('newpwdtrlname').setValidators([Validators.min(3),Validators.required]);
}
else if(角色=='非管理员'){
this.resetPwdForm.get('ewpwdctrlname').setValidators([Validators.required,Validators.pattern(''),CustomValidators.equalTo(password]);
}
}
根据需要创建自定义验证器


请参阅-

您可以使用字符串插值动态生成图案

差不多

passRequirement={
PasswordMin小写:1,
密码号码:1,
passwordMinSymbol:2,
passwordMinUpperCase:1,
passwordMinCharacters:8
};
模式=[
`(?=([^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())
.加入(“”);
resetPwdForm=this.fb.group({
newpwdctrlname:['Passwod1@@5',[Validators.required,Validators.pattern(this.pattern)],
shownewpwdctrlname:['',[]],
rptpwdtrlname:[''[Validators.required]]
});
构造函数(私有fb:FormBuilder){}
然后可以将其用作

Validators.pattern(this.pattern)

请参见

Hi,这是angular中的内置验证器,而不是您可以使用自定义正则表达式…PasswordMinLength:6 passwordMinLowerCase:1 passwordMinNumber:1 passwordMinSymbol:0 passwordMinUpperCase:1这些属性值不断变化。它可以是1或0。基于此,我需要进行验证。我该怎么做?使用自定义验证器和pred定义验证器,并在运行时更改窗体控件的验证策略。示例updatedPasswordMinLength:6 passwordMinLowerCase:1 passwordMinNumber:1 passwordMinSymbol:0 passwordMinUpperCase:1这些属性值不断更改。它可以是1或0。基于此,我需要进行验证。我如何做到这一点?刚刚编辑了我对您的ne的答案ed您只需要创建正则表达式。如果lowerCaseLength=3,它不会验证“aaDa”,而它包含3个小写characters@ErayIsmailov见下文,该方法按预期进行验证