2016-12-14 81 views
1

在Angular 2.1.0 Reactive形式中,我有一個使用formBuilder組函數的表單,它嘗試使用模式驗證器來驗證其中一個字段。Angular 2 Reactive Forms Pattern Validator;忽略案例

this.profileForm = this.formBuilder.group({ 
'email': [this.profile.email, [ 
      Validators.pattern('^[a-z0-9A-Z_]+(\.[_a-z0-9A-Z]+)*@[a-z0-9-A-Z]+(\.[a-z0-9-A-Z]+)*(\.[a-zA-Z]{2,15})$') 
     ]], 
//... 

正如你可以看到我已經手動添加的組大寫的A-Z,但我想知道是否有指定的模式驗證程序忽略大小寫的方式。我似乎無法在網上找到任何示例,並且我可以告訴您無法傳入實際的RegExp對象,它必須是字符串。

+0

這裏是一個輕量級的正則表達式參考:http://www.regexpal.com/(點擊「標誌「,有一個正則表達式標誌忽略大小寫),這裏是一個巨大的:http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean(忽略大小寫**修飾符** )。 – silentsod

+0

構建[自定義驗證器](http://blog.thoughtram.io/angular/2016/03/14/custom-validators-in-angular-2.html)。 –

回答

2

在更新版本的Angular中,這些已經解決了這個問題,而Validators.pattern函數現在接受RegExp對象。

對於這個版本,我簡單地創建了一個自定義驗證類,並添加了我自己的模式函數,它接受一個RegExp對象。看起來是這樣的:

import { AbstractControl, ValidatorFn } from '@angular/forms'; 
export class CustomValidators { 

    public static pattern(reg: RegExp) : ValidatorFn { 
     return (control: AbstractControl): { [key: string]: any } => { 
      var value = <string>control.value; 
      return value.match(reg) ? null : { 'pattern': { value } }; 
     } 
    } 
} 

,那就是引用這個驗證是這樣的形式:

this.profileForm = this.formBuilder.group({ 
     'firstName': [{ value: this.profile.firstName, disabled: true }], 

     //... other fields 

     'email': [this.profile.email, [ 
      CustomValidators.pattern(/^[a-z0-9_]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,15})$/ig) 
     ]], 

     //...other fields 

    }); 
+0

告訴你的表單重置()導致此錯誤'錯誤類型錯誤:無法讀取屬性'匹配'爲空' – Zuriel

+0

改變這個修復它,但我想它沒關係,如果角4具有模式和正則表達式。返回值&& value.match(reg)? null:{'pattern':{value}}; – Zuriel