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,}">