我花了差不多一个小时阅读类似的帖子,但在格式化单个输入字段以掩盖格式(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");
});
Run Code Online (Sandbox Code Playgroud)
如果你愿意,可以把它作为玩具答案,但是当我在用户输入时,我做了一个掩盖24小时输入的方法,因为在你的问题中你有
$('.houronly').keyup(function(){ .. }
Run Code Online (Sandbox Code Playgroud)
所以我认为你想要在用户输入时屏蔽.
当用户在24小时时间内键入时,不可能在运行时截断或拒绝不可能的键序列.我制定了一系列基于先前规则的替换规则来实现这一目标.当输入失去焦点时,将执行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;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6684 次 |
| 最近记录: |