【发布时间】:2017-04-27 01:22:04
【问题描述】:
我创建了一个自定义验证器来检查用户填写的电子邮件地址。无论如何,电子邮件字段不是必需的,但如果我添加我的验证器,它也会包含required。
这是我在组件类的constructor 中的表单:
this.myForm = fb.group({
'name': [''],
'surname': [''],
'username': ['', Validators.required],
'email': ['', validateEmail]
});
电子邮件字段不是必需的,但如果用户不填写它,则表单不会得到验证。同时,如果用户填写,我希望应用电子邮件验证。
这是我的电子邮件验证器:
export function validateEmail(c: FormControl) {
var EMAIL_REGEXP = /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})*$/i;
return EMAIL_REGEXP.test(c.value) ? null : {
validateEmail: {
valid: false
}
};
}
我可以编辑我的自定义验证器以接受空字符串,但我认为这不是解决我的问题的正确方法。
你有更好的主意吗?
【问题讨论】:
-
我可以编辑我的自定义验证器以接受空字符串,但我认为这不是解决我的问题的正确方法。:这看起来是非常自然和正确的事情对我做。
-
嗯...如果我为电子邮件地址创建自定义验证器,我希望它无法验证空字符串,因此我可以在其他组件中重用它。你不同意吗?
-
为什么不能重复使用?想要一个可选的电子邮件地址,请使用电子邮件验证器。想要一个必需的电子邮件地址,使用 required 和电子邮件验证器。每个验证器都有自己的职责和特定的错误,您可以将它们组合起来以实现所需的行为。
标签: forms validation angular angular2-forms angular2-formbuilder