2016-12-14 17 views
1

In Angular 2.1.0 Reactiveフォームでは、パターンバリデーターを使用してフィールドの1つを検証しようとするformBuilderグループ関数を使用するフォームがあります。角度2反応性パターンパターンバリデーター; Ignoring Case

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(** modifiersの下には無視されます** )。 – 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

あなたのフォームにreset()を呼び出すと、このエラーが発生する 'エラーTypeError:' null 'の'一致 'のプロパティを読み取ることができないこの変更は – Zuriel

+0

ですが、角度4にパターンと正規表現がある場合は問題ありません。戻り値&& value.match(reg)? null:{'パターン':{値}}; – Zuriel

関連する問題