1

我正在使用 timepicker 并希望限制用户输入时间超过23:59. 我正在尝试使用正则表达式,但没有成功

Fiddle Demo

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

它没有给出任何错误,但无法弄清楚发生了什么。

任何帮助是极大的赞赏。

谢谢你

4

2 回答 2

3

您可以针对每个字符自己的正则表达式进行测试;

小提琴

尝试

$("#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; 
});
于 2013-07-15T13:13:29.620 回答
1

描述

该表达式将:

  • 仅匹配有效时间 from 00:00to23:59
  • 捕获字符串的小时和分钟元素

^([01][0-9]|2[0-3]):([0-5][0-9])$

在此处输入图像描述

现场示例:http ://www.rubular.com/r/mov2nTFpF4

jsFiddle:http: //jsfiddle.net/Evaqk/

于 2013-07-15T13:05:08.480 回答