如果该输入与其最新按键的组合值未传递正则表达式,如何防止用户更改输入框中的字符串?
我看到了各种关于如何使用 keypress 测试单个字符的示例,但我需要将整个值与正则表达式匹配,而不仅仅是他们按下的键。
例如,文本框需要符合以下正则表达式:
"^023-[0-9]{0,7}$"
因此,如果他们想更改"023"
为,则应在删除字符"23"
时阻止他们。删除after0
也是如此。一旦他们输入超过 7 个数字,它也应该阻止他们。这不能在模糊上完成。必须在每次击键后完成。性能不是问题。-
023
023
如果我在 jQuery 中使用 keypress() 事件,并像这样获取输入元素的值:
$(this).val()
然后我只会在他们按下键之前得到值 - 而不是之后。因此,无法针对我的正则表达式测试输入。我不能简单地将按下的键附加到这个字符串,因为我不能假设他们只在字符串的最右侧输入键。
我研究了 keydown/keyup 事件,虽然 keyup 似乎在用户按下一个键后给了我输入的当前值,但我发现很难消除他们键入的内容的影响...... which keypress()显然没有问题。
var regex = new RegExp("^023-[0-9]{0,7}$");
$("#number").keyup(function(event) {
var number = $(this).val();
if(!regex.test(number)) {
event.preventDefault();
return false;
}
});
上面的代码只是不起作用。似乎 keypress() 使我能够停止他们键入的内容,但 keyup 使我能够获取当前值。我需要一个两者兼得的解决方案;)
问题实际上源于浏览器没有 MVC 架构这一事实。模型就是视图。不幸的是,我们无法在视图更新之前验证更新的模型......因为我们需要在 keyup 事件期间更新视图以获取更新的模型数据......到那时,阻止它们更新为时已晚查看,因为它已经更新。