2016-12-14 1 views
1

Dans Angular 2.1.0 Formulaires réactifs, j'ai un formulaire utilisant la fonction de groupe formBuilder qui tente d'utiliser le validateur de modèle pour valider l'un des champs.Validateur de formes de formes réactives angulaires 2; Ignorer le cas

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})$') 
     ]], 
//... 

Comme vous pouvez le voir, j'ajouté manuellement l'A-Z majuscule sur les groupes, mais je me demandais s'il y a un moyen de spécifier le motif validateur pour ignorer la casse. Je n'arrive pas à trouver des exemples en ligne, et comme je peux vous dire que vous ne pouvez pas passer dans un objet RegExp réel, il doit s'agir d'une chaîne.

+0

est ici une référence regex légère: http://www.regexpal.com/ (cliquez sur « drapeaux ", il y a un drapeau regex pour ignorer le cas) et voici un gigantesque: http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean (ignorez le cas sous ** modificateurs **). – silentsod

+0

Construire un [validateur personnalisé] (http://blog.thoughtram.io/angular/2016/03/14/custom-validators-in-angular-2.html). –

Répondre

2

Dans les versions plus récentes d'Angular, celles-ci ont résolu ce problème et la fonction Validators.pattern accepte maintenant les objets RegExp.

Pour cette version, j'ai simplement créé une classe de validation personnalisée et ajouté ma propre fonction de modèle qui accepte un objet RegExp. On dirait ceci:

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 } }; 
     } 
    } 
} 

Et la forme qui fait référence à ce validateur ressemble à ceci:

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

indiquant votre formulaire à reset() provoque cette erreur 'ERROR TypeError: Impossible de lire la propriété' match 'de null' – Zuriel

+0

en changeant cela le corrige, mais je suppose que cela n'a pas d'importance si angulaire 4 a motif et regex. return value && value.match (reg)? null: {'pattern': {valeur}}; – Zuriel