简体   繁体   English

Angular 6-反应形式验证模式不起作用

[英]Angular 6 - reactive form validation pattern doesn't work

I have an Angular 6 reactive form and trying to validate a password with regex pattern and it doesn't work. 我有一个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>

The regex I am usng is like this: 我正在使用的正则表达式是这样的:

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

      });
  }

Whatever I enter in the password I get the error message in the ui Not valid 无论我在密码输入我得到UI中的错误消息Not valid

Any idea what I am doing wrong? 知道我在做什么错吗?

You need to drop ('') and put (//) instead into parameter in your pattern method. 您需要在模式方法中放入('')并将其放入(//)到参数中。 It should be: 它应该是:

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

您必须在d之前加上第二个反斜杠,并删除“ ^”和“ $”,如以下示例所示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM