我花了将近一个小时阅读类似的帖子,但仍然没有成功格式化单个输入字段以屏蔽格式 (00:00) 中的输入值。
到目前为止,这是代码,但不知道为什么它不起作用:
$('.houronly').keyup(function(){
this.value=this.value.toString().replace(/^(([0-1][0-9]|2[0-3]|[0-9])|([0-1][0-9]|2[0-3]|[0-9])(:|h)[0-5]?[0-9]?)$/, "$1");
});
最佳答案
如果你愿意,可以把它当作一个玩具答案,但我做了一个方法来屏蔽 24 小时输入当用户键入它时,因为在你的问题中你有
$('.houronly').keyup(function(){ .. }
所以我假设您希望在用户键入时进行屏蔽。
当用户输入 24 小时时钟时间时,不可能的键序列应该被即时 chop 或拒绝。我制定了一系列基于以前规则的替换规则来实现这一点。当输入失去焦点时,将执行 24 小时有效性的最终检查。
现在,在您的原始正则表达式中,您有 (:|h)
所以我假设您希望允许格式为“23h”的时间。
代码:
function replaceBadInputs(val) {
// Replace impossible inputs as they appear
val = val.replace(/[^\dh:]/, "");
val = val.replace(/^[^0-2]/, "");
val = val.replace(/^([2-9])[4-9]/, "$1");
val = val.replace(/^\d[:h]/, "");
val = val.replace(/^([01][0-9])[^:h]/, "$1");
val = val.replace(/^(2[0-3])[^:h]/, "$1");
val = val.replace(/^(\d{2}[:h])[^0-5]/, "$1");
val = val.replace(/^(\d{2}h)./, "$1");
val = val.replace(/^(\d{2}:[0-5])[^0-9]/, "$1");
val = val.replace(/^(\d{2}:\d[0-9])./, "$1");
return val;
}
// Apply input rules as the user types or pastes input
$('.houronly').keyup(function(){
var val = this.value;
var lastLength;
do {
// Loop over the input to apply rules repeately to pasted inputs
lastLength = val.length;
val = replaceBadInputs(val);
} while(val.length > 0 && lastLength !== val.length);
this.value = val;
});
// Check the final result when the input has lost focus
$('.houronly').blur(function(){
var val = this.value;
val = (/^(([01][0-9]|2[0-3])h)|(([01][0-9]|2[0-3]):[0-5][0-9])$/.test(val) ? val : "");
this.value = val;
});
Demo
关于Javascript RegEx 到 MASK 24 小时和分钟 (hh :mm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668593/