Javascript 为什么';我的正则表达式不能与validator.pattern一起工作吗?
我有一个表单,我只想允许字母、空格和撇号。我有一个带角度的验证器:Javascript 为什么';我的正则表达式不能与validator.pattern一起工作吗?,javascript,regex,angular,Javascript,Regex,Angular,我有一个表单,我只想允许字母、空格和撇号。我有一个带角度的验证器: Validators.compose([ AppValidators.required, Validators.minLength(2), Validators.pattern('[a-zA-Z ]*'), ])) 第一个问题是如果我 Validators.pattern(/[a-zA-Z ]*/) 验证根本不起作用 否则我就试过这样的方法 Validators.pattern('[a-zA-Z\' ]*') V
Validators.compose([
AppValidators.required,
Validators.minLength(2),
Validators.pattern('[a-zA-Z ]*'),
]))
第一个问题是如果我
Validators.pattern(/[a-zA-Z ]*/)
验证根本不起作用
否则我就试过这样的方法
Validators.pattern('[a-zA-Z\' ]*')
Validators.pattern(/[a-zA-Z' ]*/)
Validators.pattern('[a-zA-Z\s']*')
Validators.pattern(/[a-zA-Z\s']*/)
但验证似乎不起作用。据我所知,[a-zA-Z']
似乎是我想要的,但验证仍然不起作用
编辑:
我已经尝试了用户的第四鸟和布兰登的答案(虽然很感激),但它不工作的意义上,它仍然不认为它是有效的
我已将FormControl
记录在此处:
console.log(this.member.control.firstName)
:
我建议将RegExp对象与模式验证器一起使用。有时在使用字符串时,我看到验证器的行为出人意料 对于模式本身,
^[a-zA-Z']+$
应该足够了,因此:
...Validators.pattern(new RegExp(/^[a-zA-Z ']+$/))
你应该走了。RegEx验证器:我认为最直接的解决方案是使用模式验证器:
<input name="firstName" ngModel pattern="[a-zA-Z' ]{2,}">
见:
以下是一些实现示例:(formControl、ngModel等)您是否未能避开撇号?从你的问题中不清楚“不工作”是什么意思。是否逃避角色?“不起作用”是指正则表达式中的验证。尝试使用锚点
^$
并重复字符类1+次^[a-zA-Z']+$
@Thefourthbird我尝试了这个建议,但当我尝试添加撇号时它似乎无效。你能给出一个无效的示例吗?嘿,谢谢你的建议。我已经用你的答案更新了我的问题,试图提供更多的见解,但它似乎不起作用。正则表达式本身与提供的字符串匹配:O'Reilly
如果你对照正则表达式101检查它,那么我不认为这是你的控件注册无效的原因。我从beta 2开始就一直在使用Angular,正如我所提到的,在使用正则表达式字符串的模式验证器时,我看到了一些非常奇怪的行为。使用RegEx对象时,验证程序每次都按预期工作。我已经在我的应用程序中编写了单元测试来验证这一点。奇怪的是,我正在做你正在做的事情,并添加了Validators.pattern(新的RegExp(/^[a-zA-Z']+$/)和日志显示了这一点。我必须看看我是否能抽出时间进行闪电战,看看还有什么可能会一起影响这些验证程序。
<input name="firstName" ngModel pattern="[a-zA-Z' ]{2,}">