从正则表达式 angular 创建自定义验证器反应形式
Creating custom validator reactive form from regular expression angular
我在电子邮件表单中使用了一些正则表达式验证,这是它的样子
this.customerForm = this.fb.group({
email: [null, {
Validators.pattern('^[^\s@]+@[^\s@]+\.[^\s@]{1,}$')],updateOn: 'blur'
}]
});
验证工作正常,但我需要为这个正则表达式制作自定义验证器,知道如何开始,谢谢
我试过这样
properEmailValidator(): ValidatorFn {
const nameRe = /^[^\s@]+@[^\s@]+\.[^\s@]{1,}$/;
return (control: AbstractControl): ValidationErrors | null => {
const forbidden = nameRe.test(control.value);
return forbidden ? { emailNotValid: { value: control.value } } : null;
};
}
但这不起作用:(
当您将表达式定义为字符串时,您必须转义反斜杠,就像您在 Validators.pattern('^[^\s@]+@[^\s@]+\.[^\s@]{1,}$')
.
中所做的那样
但是,如果您像在验证器函数中那样将表达式定义为正确的 RegExp
,则不能这样做,因为它会尝试将其匹配为反斜杠字符。所以你需要修改你的RegExp
如下。
const nameRe = /^[^\s@]+@[^\s@]+\.[^\s@]{1,}$/;
干杯
如果你使用的是反应式表单,那么你可以在创建表单的时候直接放上去。
filterForm: FormGroup;
filterForm = formBuilder.group({
firstName: [null],
lastName: [null],
zipCode: [null, [Validators.pattern('[0-9]{5}')]]
});
我在电子邮件表单中使用了一些正则表达式验证,这是它的样子
this.customerForm = this.fb.group({
email: [null, {
Validators.pattern('^[^\s@]+@[^\s@]+\.[^\s@]{1,}$')],updateOn: 'blur'
}]
});
验证工作正常,但我需要为这个正则表达式制作自定义验证器,知道如何开始,谢谢
我试过这样
properEmailValidator(): ValidatorFn {
const nameRe = /^[^\s@]+@[^\s@]+\.[^\s@]{1,}$/;
return (control: AbstractControl): ValidationErrors | null => {
const forbidden = nameRe.test(control.value);
return forbidden ? { emailNotValid: { value: control.value } } : null;
};
}
但这不起作用:(
当您将表达式定义为字符串时,您必须转义反斜杠,就像您在 Validators.pattern('^[^\s@]+@[^\s@]+\.[^\s@]{1,}$')
.
但是,如果您像在验证器函数中那样将表达式定义为正确的 RegExp
,则不能这样做,因为它会尝试将其匹配为反斜杠字符。所以你需要修改你的RegExp
如下。
const nameRe = /^[^\s@]+@[^\s@]+\.[^\s@]{1,}$/;
干杯
如果你使用的是反应式表单,那么你可以在创建表单的时候直接放上去。
filterForm: FormGroup;
filterForm = formBuilder.group({
firstName: [null],
lastName: [null],
zipCode: [null, [Validators.pattern('[0-9]{5}')]]
});