Validators.pattern 在模式中添加额外的 ^ 和 $



我正在使用Validators.pattern来检查我的表格中提交的name是否只包含字母。我添加的模式是lastName:[null,[Validators.required,Validators.pattern('[A-Za-z]+')]].但我注意到,如果出现错误,错误消息包含额外的^$。为什么?代码示例位于 https://stackblitz.com/edit/angular-xesgxe

Last Name字段中添加一个无效的名称(比如1First Name,因为我正在使用不同的验证器。 您将看到错误The required pattern is: ^[A-Za-z]+$。请注意,在[A-Za-z]+模式时,错误字符串中的额外^$

检查signup-component.component.ts中的createForm()功能。查找行lastName:[null,[Validators.required,Validators.pattern('[A-Za-z]+')]]

错误消息来自ShowErrorsComponent。在类ShowErrorsComponent中签入errorMessages'pattern': (params) => 'The required pattern is: ' + params.requiredPattern

因为这就是你如何使正则表达式模式匹配整个输入(^ - 代表行首,$ 代表行尾(。

否则,您的模式[A-Za-z]+将在此字符串中找到匹配项:123a,因此验证器会说该字符串有效。

编辑:查看代码(https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts#L293(,似乎可以通过传递 RegExp 而不是字符串来使用您想要的确切模式:

Validators.pattern(/[A-Za-z]+/)

我的猜测是他们添加了这种行为,因为输入上的pattern属性工作相同 (https://www.w3schools.com/tags/att_input_pattern.asp(。

另请参阅:我应该在 html5 输入正则表达式模式验证中使用 ^ 和 $ 吗?

最新更新