0

我正在尝试使用 Angular 模式验证器来验证密码、邮政编码和电话号码。

出于某种原因,无论我尝试哪种正则表达式,密码和邮政编码验证似乎都不起作用。电话号码正则表达式工作得很好,这让我更加困惑。我不确定错误在哪里,因为即使是简单的正则表达式模式似乎也不起作用,这意味着错误在表单生成器中。但是,似乎我所做的与电话号码正则表达式没有什么不同。

提前致谢!

使用的正则表达式:

// Regex to check for valid phone number
phoneRegex = "^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$";
// Minimum eight characters, at least one letter, one number and one special character:
passRegex = "^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$";
// Postalcode regex (intended effect: 4 numbers, followed by two letters)
PostalRegex = "^\d{4}[a-zA-Z]{2}";

Formbuilder(简化为仅包含相关的表单控件):

this.userForm = this.fb.group({
      phoneNumber: ['', {updateOn: 'blur', validators: [Validators.required, Validators.minLength(8), Validators.maxLength(12), Validators.pattern(this.phoneRegex)]}],
      password: ['', {updateOn: 'blur', validators: [Validators.required, Validators.minLength(8), Validators.maxLength(32), Validators.pattern(this.passRegex)]}],
      passwordConf: ['', {updateOn: 'blur', validators: Validators.required}],
      postalCode: ['', {updateOn: 'blur', validators: [Validators.required, Validators.pattern(this.PostalRegex)]}],
}, { updateOn: 'submit', validators: this.checkPassMatch.bind(this) } as AbstractControlOptions);
    }
4

1 回答 1

0

PostalRegex当您将它从字符串转换为 RegExp 文字时,您将运行得很好:

/^\d{4}[a-zA-Z]{2}/

虽然 API 接受 Regexp 和字符串,但当您传递字符串时,它会强制^$在可能影响结果的各个端 -文档

如果您想对 Angular Validator 使用什么模式有信心,建议您以这种方式转换所有正则表达式。

另外,请注意密码正则表达式需要数字的反斜杠转义,即。d应该是\d。与这个答案比较:)

于 2021-07-25T12:04:47.627 回答