Включение валидатора на основе регулярных выражений для проверок на разрыв в formBuilder в Angular 5.29 - PullRequest
0 голосов
/ 02 октября 2018

Итак, вот стекаблиц:

https://stackblitz.com/edit/ionic-f9kfnm

В основном, если код formBuilder в конструкторе выглядит следующим образом (исключая шаблон регулярного выражения):

this.signupForm = this.formBuilder.group({
      nickname: ['', Validators.compose([Validators.minLength(3), Validators.maxLength(20), Validators.required])],
      email: ['', Validators.compose([Validators.email, Validators.required])],
      password: ['', Validators.compose([Validators.minLength(3), Validators.maxLength(20), Validators.required])],
      ageTermsAccepted: [false, Validators.pattern('true')],
      policiesAccepted: [false, Validators.pattern('true')]
    });

пользовательский опыт с проверкой псевдонима выглядит нормально (предупреждение появляется и исчезает, только если введенное значение недопустимо.

Теперь, если я добавлю регулярное выражение Validator:

this.signupForm = this.formBuilder.group({
      nickname: ['', Validators.compose([Validators.pattern('^[a-zA-Z0-9_-]$'),Validators.minLength(3), Validators.maxLength(20), Validators.required])],
      email: ['', Validators.compose([Validators.email, Validators.required])],
      password: ['', Validators.compose([Validators.minLength(3), Validators.maxLength(20), Validators.required])],
      ageTermsAccepted: [false, Validators.pattern('true')],
      policiesAccepted: [false, Validators.pattern('true')]
    });

Проверка не работает какожидается.

Существует ли правило, что, если я использую регулярное выражение, мне придется полагаться только на него и не может объединить это с другими в валидаторах сборки, таких как max chars?

1 Ответ

0 голосов
/ 02 октября 2018

В вашем регулярном выражении отсутствует квантификатор, поэтому он принимает только один символ.

'^[a-zA-Z0-9_-]*$'

или вы можете указать минимальное и максимальное количество символов, а также вы можете удалить minLength и maxLength валидаторы (если вам не нужны разные валидационные сообщения):

'^[a-zA-Z0-9_-]{3,20}$'

...