2016-11-17 51 views
2

我有我的输入角的正则表达式测试并不一致NG模式验证输入

ng-pattern="/^(.+)$/g" 

这不起作用一样,每次一个NG模式验证。并显示非常怪异的行为。

plnkr参见

的ngMessage仅在每隔第二个字符I型示出。但控制台正确评估正则表达式测试。

我在测试正则表达式的角度线上的浏览器开发工具中设置了一个断点,并在控制台中进行了一些调试。这是我调试的控制台输出。调试器在我使用控制台时没有移动,所以没有值被更改。 ( - >代表我的投入,< - 就是调试器吐出)

-> regexp.test(viewValue) 
<- false 

-> regexp 
<- /^(.+)$/g 

-> /^(.+)$/g.test(viewValue) 
<- true 

-> regexp.test(viewValue) 
<- true 

谁能告诉我是怎么回事?请注意regexp.test(viewvalue)如何首先是错误的,然后在没有任何更改的最后一次测试中是真实的。

+0

只删除全局修饰符'g'。它按预期工作。 https://plnkr.co/edit/FZPFvHp8qkKqgy3oD7Er?p=preview –

+0

@StepanKasyanenko不应该正则表达式匹配并显示消息,如果多于一个字符在文本框中? – garethb

回答

2

您必须从正则表达式中删除/g,请参阅updated plunkr

按照docs

注意:避免使用对正则表达式的g标志,因为它会导致每个连续的搜索到的最后一个搜索比赛的指数开始,因此不采取将整个输入值考虑在内。

+0

但现在该消息根本不显示。如果文本框中有多个字符,我应该找一个匹配项? – garethb

+0

您何时需要显示错误消息? '^。+ $'表示文本字段中必须有1+个字符。所以,当你输入字符时,正则表达式匹配输入,并且不会出现错误信息。 –

+0

是的,但是如果我在更新的plunkr的文本框中输入任何内容,则没有错误显示? – garethb