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

时间:2015-06-05 14:05:41

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

4 个答案:

答案 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;
});

Demo

答案 1 :(得分:2)

正则表达式怎么样

'"other_npc_name"'

Regex Demo

<强>测试

\b(?:[01][0-9]|2[0-3]):[0-5][0-9]\b

答案 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);