2015-12-21 73 views
2

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

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

我的代码不能正常工作,如果我选择在我的timepicker正确的时间格式,我会得到提醒的时间是错误的。如果有人可以帮助解决这个问题,请告诉我。我的时间值是这样的:

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

什么是“timepicker”是一个框架/ API? –

+0

您应该提供sTime和eTime示例值。只需控制它们并复制问题中的粘贴内容即可。 –

+0

timepicker是一个api框架。 –

回答

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演示

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/>'; 
 
} 
 
<div id="r"/>

更新:我已经修改了正则表达式来丢弃之前接受某些值,例如像怪异0:012:9(取决于单个数字分钟的部分),如由麦克风在注释建议。

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

+0

我认为这个正则表达式有一些问题。它将匹配一位数的分钟数(例如:0:0,12:9都有效)。通常,这通常不是使用的表示。另外,如果你使用AM/PM,我不希望0:xx是一个有效的时间。如果您不使用AM/PM,则需要接受13-23小时。 – Mic

+0

@Mic:谢谢你的评论,我会修复 –