Angular 6 - шаблон проверки реактивной формы не работает

У меня есть реактивная форма Angular 6, и я пытаюсь проверить пароль с помощью шаблона регулярного выражения, и это не работает.

               <div class="form-group">
                    <label for="password">Password</label>
                    <input type="password" formControlName="password" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.password.errors }"
                    />
                    <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
                        <div *ngIf="f.password.errors.required">Required</div>
                        <div *ngIf="f.password.errors.pattern">Not valid</div>
                    </div>
                </div>

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

 ngOnInit() {
     this.registerForm = this.formBuilder.group({
           password: ['', [Validators.required, Validators.pattern('^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$')]],

      });
  }

Независимо от того, что я ввожу в пароль, я получаю сообщение об ошибке в пользовательском интерфейсе Not valid

Есть идеи, что я делаю не так?


person user2818430    schedule 29.07.2018    source источник
comment
Вы можете проверить мой ответ здесь о стиле состояния элемента управления реактивной формы stackoverflow.com/questions/51583952/   -  person malbarmavi    schedule 30.07.2018
comment
Я не знаю, что означает ваше регулярное выражение, извините, но можете ли вы проверить мой ответ здесь о проверке шаблона stackoverflow.com/questions/51551831/   -  person malbarmavi    schedule 30.07.2018


Ответы (2)


Вместо этого вам нужно отбросить ('') и поместить (//) в параметр в вашем методе шаблона. Должен быть:

password: ['', [Validators.required, Validators.pattern(/^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/)]]
person Vlada Veljkovic    schedule 07.09.2018
comment
Спасибо! работал. (? =. * [A-Za-z]) (? =. * \ D) (? =. * [$ @ $!% * #? &]) Требуется RegExp, а не String. - person Ronald Dsouza; 16.10.2018

Вы должны поставить вторую обратную косую черту перед d и удалить '^' и '$', как в следующем примере:

'(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}'
person N. Richli    schedule 22.03.2019