我正在用Ionic2构建一个应用程序。在应用程序中,我有一个表单,它使用formBuilder来验证每个输入字段。我想,对于电子邮件输入字段,我将只使用带有正则字符串的Validators.pattern。但是在尝试了多个不同的regex表达式之后,我无法让它工作。表单上说,即使我输入了一个有效的电子邮件地址,如'thisisanemail@gmail.com‘,该字段也是无效的。问题不是regex表达式,而是我对Validator的实现。
这是我的formBuilder:
this.inputGroup = this.formBuilder.group({
fullName : ['', Validators.compose([Validators.maxLength(30), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
email : ['', Validators.compose([Validators.required, Validators.pattern('/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/')])],
subject : ['', Validators.compose([Validators.maxLength(30), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
message : ['', Validators.compose([Validators.maxLength(500), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
});为什么Validator声称是电子邮件,如上面的例子,是无效的?有更好的方法吗?
发布于 2016-10-21 05:02:03
您可以扩展验证器接口并创建电子邮件验证器指令,如下所示,这样您也可以在另一种形式中使用相同的指令:
import { Directive, forwardRef, Attribute } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';
@Directive({
selector: '[email-validator][formControlName],[email-validator][ngModel]',
providers: [{provide: NG_VALIDATORS, useExisting: EmailValidatorDirective, multi: true}]
})
class EmailValidatorDirective implements Validator {
validate(c: AbstractControl): {[key: string]: any} {
let regExp = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
if (!regExp.test(c.value)) {
return {"invalidEmail": true};
}
return null;
}
}发布于 2017-06-13 00:03:46
在没有指令的情况下执行此
审定:
this.form = this.formBuilder.group(this.createValitation());
private createValitation() {
return {
email: ['', [<any>Validators.required, <any>Validators.pattern(GlobalValidator.EMAIL_REGEX)]]
};
}Regex:
export class GlobalValidator {
public static EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
}https://stackoverflow.com/questions/40168655
复制相似问题