Angular 4被动表单通过正则表达式进行电子邮件验证失败

时间:2018-03-08 14:06:13

标签: javascript html angular

我正在使用反应式表单来获取用户输入。不满意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;没有错误

我在多个在线正则表达式测试者中检查了这个正则表达式,他们都只接受上面的最后一个例子,他们都没有接受第二个例子。

编辑:
正则表达式很好并且运行良好,问题是模式验证器不能正确解析正则表达式,或者其他东西。

4 个答案:

答案 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.33.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}$/