AngularJS 1.5.11 中的奇怪验证器行为
Strange validator behaviour in AngularJS 1.5.11
我们的应用程序仍在使用 AngularJS 1.5.11,但我已经使用版本 1.7.2 测试了包含的示例并获得了相同的结果。
问题是 validateNumber
函数的奇怪行为。对于每个键入的字符,验证似乎在 true
和 false
之间切换。 validateMin
和 validateMax
函数按预期工作。
示例代码可以在这里找到:https://codepen.io/kdbruin/pen/MBmXYz
关于为什么会发生这种情况的任何见解?
也许这就是罪魁祸首?
test()
called multiple times on the same global regular expression instance will advance past the previous match.
最简单的解决方法可能是更改
var result = numberRegexp.test(modelValue);
到
var result = numberRegexp.search(modelValue) !== -1;
看来是正则表达式出了问题。使用时
var numberRegexp = new RegExp("^[-+]?\d+(" + (decimalSeparator === "." ? "\." : decimalSeparator) + "\d*)?$", "i");
问题消失了。所以看来原来的"g" flag应该不用了
我们的应用程序仍在使用 AngularJS 1.5.11,但我已经使用版本 1.7.2 测试了包含的示例并获得了相同的结果。
问题是 validateNumber
函数的奇怪行为。对于每个键入的字符,验证似乎在 true
和 false
之间切换。 validateMin
和 validateMax
函数按预期工作。
示例代码可以在这里找到:https://codepen.io/kdbruin/pen/MBmXYz
关于为什么会发生这种情况的任何见解?
也许这就是罪魁祸首?
test()
called multiple times on the same global regular expression instance will advance past the previous match.
最简单的解决方法可能是更改
var result = numberRegexp.test(modelValue);
到
var result = numberRegexp.search(modelValue) !== -1;
看来是正则表达式出了问题。使用时
var numberRegexp = new RegExp("^[-+]?\d+(" + (decimalSeparator === "." ? "\." : decimalSeparator) + "\d*)?$", "i");
问题消失了。所以看来原来的"g" flag应该不用了