AngularJS 1.5.11 中的奇怪验证器行为

Strange validator behaviour in AngularJS 1.5.11

我们的应用程序仍在使用 AngularJS 1.5.11,但我已经使用版本 1.7.2 测试了包含的示例并获得了相同的结果。

问题是 validateNumber 函数的奇怪行为。对于每个键入的字符,验证似乎在 truefalse 之间切换。 validateMinvalidateMax 函数按预期工作。

示例代码可以在这里找到:https://codepen.io/kdbruin/pen/MBmXYz

关于为什么会发生这种情况的任何见解?

也许这就是罪魁祸首?

test() called multiple times on the same global regular expression instance will advance past the previous match.

MDN

最简单的解决方法可能是更改

var result = numberRegexp.test(modelValue);

var result = numberRegexp.search(modelValue) !== -1;

看来是正则表达式出了问题。使用时

var numberRegexp = new RegExp("^[-+]?\d+(" + (decimalSeparator === "." ? "\." : decimalSeparator) + "\d*)?$", "i");

问题消失了。所以看来原来的"g" flag应该不用了