【问题标题】:Javascript RegEx: validate timeJavascript RegEx:验证时间
【发布时间】:2026-01-26 08:30:01
【问题描述】:

我有一个秒表变量,可以按以下格式获取值: HH:MM:SS 大部分时间。 'HH' 可以超过 24 小时 - 基本上是任何有效数字。

我对这个正则表达式的东西不太好,但能够写出对大多数情况都有好处的东西,但无法验证小时是否为个位数。前任。下面的正则表达式通过时间1:10:09,虽然它是无效的。有效小时部分应为01

//var stopWatchTime = '02:10:09'; //Valid
//var stopWatchTime = '00:10:09'; //Valid
//var stopWatchTime = '1234:10:09'; //Valid
//var stopWatchTime = ':10:09'; //Invalid
//var stopWatchTime = 'ax:10:09'; //Invalid
var stopWatchTime = '1:10:09'; //Invalid, should be 01:10:09. 

if(!stopWatchTime .match(/^\d+:\d{2}:\d{2}$/)){
    alert('invalid time- ' + stopWatchTime);
}
else{
    alert('valid time - ' + stopWatchTime);
}

我应该在正则表达式中进行哪些更改以说明它应该检查任何数字,但小时部分应该有 2 位或更多位?

【问题讨论】:

  • /^\d+:\d{2}:\d{2}$/ 应该是 /^\d{2}:\d{2}:\d{2}$/
  • @Nemanja,那是我原来的正则表达式,但它在小时部分中所占的位数不超过 2 位。
  • @Ohgodwhy,我无法在超过 2 位数的时间内完成这项工作。

标签: javascript jquery regex time


【解决方案1】:
/^\d{2,}:\d{2}:\d{2}$/

将 + 更改为 {2,} 以使其包含两个或更多字符

如果你想看看匹配和不匹配的东西,你可以在这里玩http://regexr.com?31fu4

编辑: 此外,如果您只想在小时/分钟部分匹配最多 59 个,请使用

^\d{2,}:(?:[0-5]\d):(?:[0-5]\d)$

【讨论】:

  • 出色的解决方案和出色的链接。你不会相信我花了一些时间来起草这个问题。因为我不想看起来很愚蠢..我尝试了各种选项,除了这个{2,}。但感谢您的快速回复。我只能在另外 7 分钟内接受这个答案。等待...
  • ...也 Ghost 感谢末尾的额外行检查分钟/秒匹配 0-59。真的很有帮助。
【解决方案2】:

http://gskinner.com/RegExr/?31fug^\d{2,}(:[0-5]\d){2}$

【讨论】:

    【解决方案3】:
    // use this function to  validate time in HH:mm formate
    
    function validate_time(time){
        var a=true;
    
        var time_arr=time.split(":");
        if(time_arr.length!=2){           
            a=false;
        }else{
            if(isNaN(time_arr[0]) || isNaN(time_arr[1])){                
                a=false;
            }
            if(time_arr[0]<24 && time_arr[1]<60)
            {
    
            } else{
                a=false;
            }         
        }
        return a;
    
    }
    

    【讨论】:

      【解决方案4】:

      另一种解决方案可能是:

       $('#input-horaIni, #input-horaFin').blur(function () {
              var validTime = $(this).val().match(/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/);
              if (!validTime) {
                  $(this).val('').focus().css('background', '#fdd');
              } else {
                  $(this).css('background', 'transparent');
              }
          });
      

      这对我有用...基于页面:http://www.mkyong.com/regular-expressions

      【讨论】:

        【解决方案5】:

        这是我对此验证的回答!

        function checkTimes(val){
        val=new String(val);
        if(val.length!=5){
            return false;
        }
        else{
            var hour=val.substring(0,2);
            var min=val.substring(3,5);
           if(val.substring(2,3)!==":") return false;
            if(isNaN(hour)) return false;
            if(isNaN(min)) return false;
            if(parseInt(hour)<24){
                if(parseInt(min)<60){
                    return true;
                }
                else return false;
        
            }else return false;
        }
        }
        

        您可以将我的答案扩展到 8 个字符...

        【讨论】: