2016-12-14 3 views
1

В Angular 2.1.0 Реактивные формы, у меня есть форма, использующая групповую функцию formBuilder, которая пытается использовать шаблонный валидатор для проверки одного из полей.Угловой 2 реактивный шаблонный шаблонный валидатор; Игнорирование случая

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

, сообщающий вашей форме для сброса() вызывает эту ошибку «ERROR TypeError: не может прочитать свойство« match »of null» – Zuriel

+0

, изменяя это, но я думаю, это не имеет значения, если у углового 4 есть шаблон и регулярное выражение. return value && value.match (reg)? null: {'pattern': {value}}; – Zuriel

Смежные вопросы