在 Angular 5.29 中包含基于正则表达式的 formBuilder 验证器中断检查

Inclusion of regex based validator for formBuilder breaks checks in Angular 5.29

所以这里是 stackblitz:

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')]
    });

昵称检查的用户体验看起来不错(警告仅在输入值无效时出现并消失。

现在,如果我添加正则表达式验证器:

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)结合使用?

您的正则表达式缺少量词,因此它只接受单个字符。

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

或者你可以指定最小和最大字符数,你可以删除 minLengthmaxLength 验证器(除非你想要不同的验证消息):

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