2016-07-19 3 views
1

Я написал пользовательский валидатор для адресов электронной почты, который выглядит следующим образом:Угловой 2 - валидатор всегда возвращает истину, даже если условие ложно

function emailValidator(control: FormControl): { [s: string]: boolean } { 
    if (!control.value.match(/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-][email protected][a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i)) { 
     console.log('invalid'); 
     return {invalidEmail: true}; 
    }else{ 
     console.log('valid'); 
     return {invalidEmail: false}; 
    } 
} 

Я использую валидатор, чтобы отобразить сообщение об ошибке на моей странице со следующей HTML:

<div class="formError" *ngIf="myForm.controls['email'].hasError('invalidEmail')"> 
     <p> 
      <i class="fa fa-exclamation-triangle"></i> Enter your email address. 
     </p> 
    </div> 

моего FormGroup выглядит следующим образом:

this.myForm = fb.group({ 
    'content' : ['',Validators.minLength(10)], 
    'email' : ['',Validators.compose([Validators.required,emailValidator])], 
    'name' : ['',Validators.required], 
    'captcha' : ['',this.captchaValidator(this.captchaA,this.captchaB)] 
}); 

Когда я ввожу неверный адрес электронной почты, сообщение об ошибке отображается так, как должно быть. Когда я ввешу действительный адрес электронной почты, сообщение также показывается. Когда введен правильный адрес электронной почты, строка «valid» регистрируется в моей консоли, что означает, что мой emailValidator возвращает false, и это должно привести к исчезновению сообщения об ошибке. Любая мысль о том, что может быть проблемой?

ответ

2

Если проверка прошла успешно, вам нужно возвратить нуль, а не объект:

function emailValidator(control: FormControl): { [s: string]: boolean } { 
    if (!control.value.match(/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-][email protected][a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i)) { 
    console.log('invalid'); 
    return {invalidEmail: true}; 
    } else { 
    console.log('valid'); 
    return null; // <------- 
    } 
} 
Смежные вопросы