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

标签 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");
    });

最佳答案

如果你愿意,可以把它当作一个玩具答案,但我做了一个方法来屏蔽 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/

相关文章:

python - 为什么 Python 中的 re.sub 在这个测试用例上不能正常工作?

MYSQL错误: #3699 - Timeout exceeded in regular expression match

php - 通过正则表达式从background-image属性获取URL

javascript - 从 DS.RESTAdapter 获取 api 数据到模型中

javascript - jQuery 将类附加到匹配的字符串/数字组合

regex - 为什么输出 "True"

javascript - 请仅使用纯 JS 更改单击单选按钮的背景颜色

javascript - 如何在 Javascript 中将格式化的金额转换为整数?

javascript - 让输入框出现在下拉菜单中选择 HTML/Javascript

javascript - 如何停止双击事件的传播