我正在使用反应式表单来获取用户输入。不满意EmailValidator
我正在使用模式。
emailRegEx = '^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$';
this.email = new FormControl('', [Validators.required, Validators.pattern(emailRegEx)]);
HTML:
<input type="email" formControlName="email" [ngClass]="contactForm.get('email').errors && (contactForm.get('email').dirty || isButtonClicked) ? 'contact-input input-error' : 'contact-input'">
但是这是因为某种原因,正则表达式在@
之后接受4个字符,没有句号。
name@d
- &gt;错误
name@doma
- &gt;没有错误
name@domain.
- &gt;错误
name@domain.com
- &gt;没有错误
我在多个在线正则表达式测试者中检查了这个正则表达式,他们都只接受上面的最后一个例子,他们都没有接受第二个例子。
编辑:
正则表达式很好并且运行良好,问题是模式验证器不能正确解析正则表达式,或者其他东西。
答案 0 :(得分:7)
该模式不正确string。在契约中,你是在一个字符串内,以逃避'。'你需要使用双反斜杠:
emailRegEx = '^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$'
或者如果你想避免这样做,我建议使用:
emailRegEx = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/
修改:请注意,这是一个排除大量有效电子邮件地址的简单模式(请参阅RFC 5322(3.2.3和3.4.1部分)和RFC 5321)。例如,email validator中的角度构建使用以下模式
/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/
答案 1 :(得分:1)
您可以使用提供过多验证类型的CustomValidator包:https://www.npmjs.com/package/ng2-validation
像那样导入它:
import { CustomValidators } from 'ng2-validation';
并在表单控件中使用它:
this.email = new FormControl('', [Validators.required, CustomValidators.email]);
此致
答案 2 :(得分:0)
import {Component} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
@Component({
templateUrl: './forgot-password.component.html',
styleUrls: ['./forgot-password.component.scss']
})
export class ForgotPasswordComponent {
psResetForm: FormGroup;
constructor(private fb: FormBuilder) {
this.psResetForm = fb.group({
'email': [null, Validators.compose([Validators.required, Validators.email])]
});
}
makeRequestToResetLink(formData, valid: boolean) {
if (valid) {
alert(formData.email);
}
}
}
您的模板应如下所示
<form [formGroup]="psResetForm" (ngSubmit)="makeRequestToResetLink(psResetForm.value,psResetForm.valid)">
<input type="email" formControlName="email"/>
<button type="submit">
submit
</button>
</form>
答案 3 :(得分:0)
我用这个:
/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/