2016-07-19 51 views
1

我已經寫了電子郵件地址,自定義驗證,看起來像這樣:角2 - 自定義的驗證總是返回true,即使條件爲假

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

如果驗證成功,你需要返回null,不是一個對象:

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; // <------- 
    } 
} 
相關問題