我正在使用Validators.pattern来检查我的表格中提交的name
是否只包含字母。我添加的模式是lastName:[null,[Validators.required,Validators.pattern('[A-Za-z]+')]]
.但我注意到,如果出现错误,错误消息包含额外的^
和$
。为什么?代码示例位于 https://stackblitz.com/edit/angular-xesgxe
在Last Name
字段中添加一个无效的名称(比如1
First 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 输入正则表达式模式验证中使用 ^ 和 $ 吗?