Angular проверка шаблонов реактивных форм не работает должным образом - PullRequest
1 голос
/ 22 января 2020

У меня есть реактивная проверка форм для пароля, и шаблон выглядит следующим образом:

new RegExp('^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[#$^+=!*()@%&]).{8,50}$');

Моя цель - проверить строку таким образом:

  • От 8 до 50 символов
  • Имеет строчную букву
  • Имеет прописную букву
  • Имеет число
  • И имеет символ

По какой-то причине он работает как брелок, но если я ввожу пароль, начинающийся с одного числа, проверка не пройдёт.

Что я делаю не так? Примеры паролей:

1dD5a971 # - не совпадает

11dD5a971 # - не совпадает

Код angular:

 static PASSWORD_PATTERN = new RegExp('^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[#$^+=!*()@%&]).{8,50}$');
this.form= fb.group({
            user: [...],
            password: ['', [Validators.compose([
                Validators.required,
                Validators.min(8),
                Validators.max(50),
                Validators.pattern(AddUserComponent.PASSWORD_PATTERN)
            ])]]
        };

Заранее спасибо.

1 Ответ

0 голосов
/ 22 января 2020

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

    this.form = fb.group({
      password: [
        "",
        [
          Validators.required, 
          Validators.minLength(8),
          Validators.maxLength(50),
          Validators.pattern(/[A-Z]/),
          Validators.pattern(/[a-z]/),
          Validators.pattern(/[0-9]/),
          Validators.pattern(/[!@#$]/),
         ]
      ]
    });

демо de

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...