我花了差不多一个小时阅读类似的帖子,但在格式化单个输入字段以屏蔽格式(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");
});
答案 0 :(得分:6)
如果您愿意,可以将此作为玩具答案,但我提出了一种方法来掩盖24小时输入,因为用户输入,因为在您提出的问题中
$('.houronly').keyup(function(){ .. }
所以我认为你在用户输入时想要屏蔽。
当用户在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;
});
答案 1 :(得分:2)
答案 2 :(得分:0)
使用jQuery:
box_open = document.querySelector('.msg-time');
$.mask.definitions['H'] = "[0-2]";
$.mask.definitions['h'] = "[0-9]";
$.mask.definitions['M'] = "[0-5]";
$.mask.definitions['m'] = "[0-9]";
$(".open").mask("Hh:Mm", {
completed: function() {
$(this).text().substr(0, 2);
if (parseInt($(this).val()) > 23){
box_open.innerHTML ='<div class="alert alert-danger"> Invalid time!</div>';';
$(".open").val("");
};
}
});
HTML:
<div class='msg-time'></div>
<div>
<label>Open</label>
<input type="text" class="open" name="open" id="open">
</div>
答案 3 :(得分:-1)
试试这个([01]?[0-9] | 2 [0-3]):( [0-5] [0-9]) 或(2 [0-3] | [01]?[0-9]):( [0-5]?[0-9])
var re = /([01]?[0-9]|2[0-3]):([0-5][0-9])/;
var str = "12:48";
var myArray = str.match(re);
var hours = str.replace(re, "$1");
var minutes = str.replace(re, "$2");
console.log(myArray);
console.log(hours);
console.log(minutes);