Angular.js ng-pattern奇怪的行为

时间:2013-09-23 14:23:50

标签: javascript regex angularjs

我一直在处理一个接受Twitter参数的表单,例如#和@来填充Twitter Feed。

使用Angular.js我曾计划使用内置的ng-pattern指令在保存之前验证输入,但验证的行为非常奇怪。在输入时,它会在输入的每个第二个字符上将“有效”字符串标记为无效。

很难解释确切的行为,所以继承人Plunker

为了完整性,我将在这里添加我的输入字段ng-pattern

<input type="text" ng-pattern="/(^|\s)@(\w+)|(^|\s)#(\w+)/g" ng-model="foo" name="foo"/>

1 个答案:

答案 0 :(得分:6)

这是因为全局匹配g选项,如果你把它拿出来就有效。

多次拨打testexec involves state

  

与exec(或与其结合使用)一样,在同一个全局正则表达式实例上多次调用的测试将超过上一个匹配。

基本上它正试图继续进行另一场比赛,但找不到一场:

a = /@(\w+)$/g;
> /@(\w+)$/g
a.exec("@test")
> ["@test", "test"]
a.exec("@test")
> null