Javascript RegEx到MASK 24小时和分钟(hh:mm)

Pau*_*eno 2 javascript regex

我花了差不多一个小时阅读类似的帖子,但在格式化单个输入字段以掩盖格式(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)

Dra*_*kes 6

如果你愿意,可以把它作为玩具答案,但是当我在用户输入时,我做了一个掩盖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)

演示