某些背景,我使用指令强制实施货币输入字段的实时验证。我这样做是通过定义正则表达式pattern
,在输入字段上侦听keypress
事件,并使用pattern.test()
将用户输入作为函数的参数。如果我的函数找不到与pattern.test()
的匹配项,我会在按键事件上使用preventDefault()
来阻止数字进入输入。因此,只允许与我的pattern
匹配的数字进入输入。这一切在使用场景中完全正常,用户不想返回并编辑他/她的输入。请参阅下面的代码。
var pattern = new RegExp('^\\-{0,1}[0-9]{0,}\\.{0,1}[0-9]{0,2}$');
element.on('keypress', function(event) {
var testString = element[0].value + event.key;
if (!pattern.test(testString)) {
event.preventDefault();
}
});
问题我想要在通过验证后编辑用户输入。为了澄清,我编写代码的方式,正则表达式测试var testString = element[0].value + event.key
,并且不知道位置变化。
因此,如果123.45当前在输入框中,当我想将其编辑为6123.45时,我的正则表达式实际上是针对123.456进行测试(因为event.key
始终附加到当前值的末尾输入框)。因为我的正则表达式只允许2个小数位,所以新键被调用preventDefault()
- 使得它看起来像值的编辑无效。
我似乎无法在输入框中可靠地获取LIVE值,同时仍然专注于它(已尝试ctrl.$viewValue
和ctrl.$modelValue
,但这总是最终成为值在我刚刚输入的新密钥之前。
有没有人对如何执行此实时验证和支持编辑有任何建议?