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

时间:2018-07-29 22:22:01

标签: angular angular6 angular-reactive-forms angular-validation angular-validator

我有一个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中得到错误消息

知道我在做什么错吗?

2 个答案:

答案 0 :(得分:5)

您需要拖放('')并将(//)放入模式方法的参数中。 应该是:

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

答案 1 :(得分:0)

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

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