时间戳验证? JQuery的/ JavaScript的

时间:2015-12-21 17:45:11

标签: javascript jquery regex timepicker

我使用timepicker作为开始和结束时间。如果用户输入错误的时间格式,我想对这两个输入字段进行验证。这是我的HTML代码:

<th>Start Time:</th>
<td>
   <input type="text" id="stime" name="stime" maxlength="10"/>
</td>
<th>End Time:</th>
<td>
   <input type="text" id="etime" name="etime" maxlength="10"/>
</td>

这是我的JavaScript验证码:

var sTime = $('#stime').val();
var eTime = $('#etime').val();
var regExp = /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?$/i

if(regExp.test(sTime) == false){
    alert('Start Time is wrong');
}else if(regExp.test(eTime) == false){
    alert('End Time is wrong');
}

我的代码不起作用,如果我在我的时间选择器中选择正确的时间格式,我会警惕时间错误。如果有人可以帮助解决这个问题,请告诉我。我的时间价值看起来像这样:

start time: 08:00 am 
end time: 01:15 pm

1 个答案:

答案 0 :(得分:2)

如果您想匹配ampm中分割的时间间隔,则时间范围将介于00:0012:59之间。

所以你的正则表达式将是:

^(?:(?:0?\d|1[0-2]):[0-5]\d)$

检查online demo

<强>勒亘

^                # Start of the string
 (?:             # NCG1
   (?:           # NCG2
     0?\d        # An optional zero followed by a single number between zero and nine \d is just like [0-9]
       |         # OR
       1[0-2]    # A literal '1' followed by a single number between zero and two
    )            # CLOSE NCG2
    :            # A literal colon ':'
    [0-5]\d      # A single number from 0 to 5 followed by any digit
  )              # CLOSE NCG1
$                # End of the string

Js Demo

&#13;
&#13;
var re = /^(?:(?:0?\d|1[0-2]):[0-5]\d)$/;

var tests = ['08:00','01:15','1:14','02:23','23:23','12:01','13:05','3:04','5:65','0:0','12:9','0:34','0:01','00:31','0:00','00:00'];
var m;

while(t = tests.pop()) {
    document.getElementById("r").innerHTML += '"' + t + '"<br/>';
    document.getElementById("r").innerHTML += 'Valid time? ' + ( (t.match(re)) ? '<font color="green">YES</font>' : '<font color="red">NO</font>') + '<br/><br/>';
}
    
&#13;
<div id="r"/>
&#13;
&#13;
&#13;

更新:我已修改正则表达式以丢弃之前接受的某些值,例如奇怪的0:012:9(取决于单个数字分钟部分) ,正如麦克在评论中所建议的那样。

然而,正则表达式继续匹配午夜00:xx和中午12:xx之后的分钟数。在意大利数字时钟中,这只是用于在天顶和天底之间进行区分的方式(我不能确定它是普遍接受的,但我认为它是合理的默认值)。