Jquery 无法将正则表达式应用于时间输入

Jquery 无法将正则表达式应用于时间输入,jquery,regex,datetime,timepicker,Jquery,Regex,Datetime,Timepicker,我正在使用时间选择器,希望限制用户输入的时间超过23:59。我正在尝试使用正则表达式,但没有成功 HTML: <input type="text" id="test1" placeholder="HH:MM"/> jQuery $("#test1").keypress(function(e) { var regex = ["([01]?[0-9]|2[0-3])",":","[0-5][0-9]"], string = $(this).val() + Stri

我正在使用时间选择器,希望限制用户输入的时间超过
23:59
。我正在尝试使用正则表达式,但没有成功

HTML:

<input type="text" id="test1" placeholder="HH:MM"/>

jQuery

$("#test1").keypress(function(e) {
    var regex = ["([01]?[0-9]|2[0-3])",":","[0-5][0-9]"],
    string = $(this).val() + String.fromCharCode(e.which),b = true;
    for (var i = 0; i < string.length; i++) {
        if (!new RegExp("^" + regex[i] + "$").test(string[i])) {
            b = false;
        }    
    }
    return b;
});
$(“#test1”)。按键(功能(e){
var regex=[“([01]?[0-9]| 2[0-3])”,“:”,“[0-5][0-9]”,
string=$(this.val()+string.fromCharCode(e.which),b=true;
对于(变量i=0;i
它没有给出任何错误,但无法找出发生了什么

非常感谢您的帮助

谢谢

描述 此表达式将:

  • 仅匹配从
    00:00
    23:59
  • 捕获字符串的小时和分钟元素
^([01][0-9]| 2[0-3]):([0-5][0-9])$

现场示例如下:

jsIDLE:

说明 此表达式将:

  • 仅匹配从
    00:00
    23:59
  • 捕获字符串的小时和分钟元素
^([01][0-9]| 2[0-3]):([0-5][0-9])$

现场示例如下:


jsiddle:

您可以根据每个字符自己的正则表达式测试每个字符

试一试

$("#test1").keypress(function(event) 
{
   var regexs = [/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];

   var key = event.which;

   var string = $(this).val() + String.fromCharCode(key)

   var characters  = string.split("");

   var passed = true;

   var isBackspace = key === 8;

   var shouldTest = characters.length < 5 && ! isBackspace;

   passed = ! ( characters.length > 5 && ! isBackspace );

   if(shouldTest)
   {
       for (var i = 0; i < characters.length; i++) 
       {
           var character = characters[i];
           var regex = regexs[i];

           var testFailed = ! regex.test(character) ;

           if( testFailed ) 
           { 
               passed = false; 
               break;
           }

       }
   }

   return passed; 
});
$(“#test1”)。按键(功能(事件)
{
变量regexs=[/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key=event.which;
var string=$(this.val()+string.fromCharCode(key)
var characters=string.split(“”);
var通过=真;
var isBackspace=key==8;
var shouldTest=characters.length<5&!isBackspace;
已通过=!(characters.length>5&&!isBackspace);
如果(应该测试)
{
对于(变量i=0;i
您可以根据每个字符自身的正则表达式测试每个字符

试一试

$("#test1").keypress(function(event) 
{
   var regexs = [/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];

   var key = event.which;

   var string = $(this).val() + String.fromCharCode(key)

   var characters  = string.split("");

   var passed = true;

   var isBackspace = key === 8;

   var shouldTest = characters.length < 5 && ! isBackspace;

   passed = ! ( characters.length > 5 && ! isBackspace );

   if(shouldTest)
   {
       for (var i = 0; i < characters.length; i++) 
       {
           var character = characters[i];
           var regex = regexs[i];

           var testFailed = ! regex.test(character) ;

           if( testFailed ) 
           { 
               passed = false; 
               break;
           }

       }
   }

   return passed; 
});
$(“#test1”)。按键(功能(事件)
{
变量regexs=[/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key=event.which;
var string=$(this.val()+string.fromCharCode(key)
var characters=string.split(“”);
var通过=真;
var isBackspace=key==8;
var shouldTest=characters.length<5&!isBackspace;
已通过=!(characters.length>5&&!isBackspace);
如果(应该测试)
{
对于(变量i=0;i
谢谢您的回复,但我对这些表达式很熟悉,我只是用
keypress()
无法在我的代码中使用它,正如您在fiddle中看到的那样。再次感谢您提供的好例子。我不确定按键是最好的解决方案,因为它会尝试验证每一个按键的字符串,你可能会考虑模糊事件。谢谢你的回应,但是我对这些表达式很熟悉,我只是不知道它在我的代码中使用了<代码>键()/<代码>,你可以在小提琴中看到它。再次感谢您提供的好例子。我不确定KEPress是最好的解决方案,因为它将尝试验证每一个按键的字符串,您可能会考虑模糊事件。