2017-02-22 13 views
1

Для Углового 2 приложения, я написал пользовательский валидатор машинопись класс, как показано ниже,буквенно-цифровая проверка не работает

import { FormControl } from '@angular/forms'; 
 

 
export class AlphaNumericValidator { 
 
    static invalidAlphaNumeric(control: FormControl): { [key: string]: boolean } { 
 
     if (control.value.length && !control.value.match(/^[a-z0-9]+$/i)) { 
 
      return { invalidAlphaNumeric: true }; 
 
     } 
 
     return null; 
 
    } 
 
}

Я подаю этот валидатор для Model Driven формы,

'name': [this.exercise.name, [Validators.required, AlphaNumericValidator.invalidAlphaNumeric]], 

И вот это HTML,

<label *ngIf="exerciseForm.controls.name.hasError('invalidAlphaNumeric') && (exerciseForm.controls.name.touched || submitted)" class="alert alert-danger validation-message">Name must be alphanumeric</label> 

Я замечаю, что всякий раз, когда я набираю символ во вводе, вызывается вышеупомянутый код класса TypeScript, но каждый раз он возвращается Null.

Есть ли проблема в классе typeScript?

Спасибо!

+0

Может быть только потому, что 'control.value.match (/^[а-z0-9] + $/я)' всегда сопоставляется –

+0

тогда что было бы правильным регулярным выражением для буквенного числа – user584018

+0

Что вы получаете, когда добавляете 'console.log (control.value.match (/^[a-z0-9] + $/i));' before th 'if (...) '? –

ответ

0

использование

!/^[a-z0-9]+$/i.test(control.value) 

, чтобы получить логический результат

+0

Я пробовал это, но теперь даже для действительные буквенно-цифровые значения, сообщение об ошибке всегда appreas – user584018

+0

Невозможно воспроизвести. Это прекрасно работает в консоли браузера, например '!/^ [A-z0-9] + $/i.test ('abc')' ('false') или'!/^ [A-z0-9] + $ /i.test ('ab.) '(' true') –

+0

ОК, я понял. ваше решение правильно – user584018