<script type="text/javascript">
function checknow(){
var obj = document.getElementById("dt")
if(!/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(obj.value)) alert("请输入正确的日期时间格式!")
}
</script>
<input type="text" id="dt" value="2016-09-09 11:08:33" />
<input type="button" value="检测" onClick="checknow()" />
以上实例点击检测后无报错,表示格式正确。你故意改错再检测就会出现错误提示了。
如果只需要检测日期或时间,可以自己改一下正则式,应该容易看懂的。
if(/^(\d{1,2})(:)?(\d{1,2})(:)?(\d{1,2})$/.test(begintime))改为
var matchedArr = begintime.match(/^(\d{1,2})(?:\:)?(\d{1,2})(?:\:)?(\d{1,2})$/)
if(matchedArr == null || matchedArr[1]>24 || matchedArr[2]>60 || matchedArr[3]>60)
//do something........... 注意,因为用了?:所以数组是1 2 3而不是1 3 5
?: 为匹配后不存储结果,节约内存,在非常长的字符串有很大优势,不过在这里写不写差不多。
你写的代码也是可以的,但是一般是不会这么写的。 test方法返回的结果只是true和false,在测试字符串后,匹配结果不是返回给begintime变量,而是存在正则的全局对象RegExp中。
你的if那里应该改为if(RegExp.$1 >24 ..................)
但是像你这种情况,建议写法是我上面提出的。而不是用RegExp.$N 这种是有数量限制的,只有$1 - $9可用。而且只是临时保存。