Angular正则表达式在输入上测试不一致的ng模式验证

Angular regex test not consistent ng-pattern validation on input

本文关键字:ng 模式 验证 不一致 测试 正则表达式 输入 Angular      更新时间:2023-09-26

我有一个ng模式验证我的输入

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

这并不是每次都一样。表现出非常奇怪的行为。

看到plnkr

ngMessage只在每第二个字符I输入时显示。但是控制台正确地评估regex测试。

我在浏览器开发工具中设置了一个断点,在angular中测试正则表达式并在控制台上进行了一些调试。下面是我调试时的控制台输出。当我使用控制台时,调试器没有移动,因此没有更改任何值。(->代表我的输入,<-是调试器输出的)

-> regexp.test(viewValue)
<- false
-> regexp
<- /^(.+)$/g
-> /^(.+)$/g.test(viewValue)
<- true
-> regexp.test(viewValue)
<- true
谁能告诉我发生了什么事?请注意,regexp.test(viewvalue)如何首先为false,然后在最后一次测试中为true,而没有任何更改。

您必须从正则表达式中删除/g,参见更新后的plunkr。

根据文档:

注意:避免在RegExp上使用g标志,因为它将导致每次连续搜索从上次搜索匹配的索引开始,从而不考虑整个输入值。