日期:2014-05-18  浏览次数:20494 次

请教一个正则表达式的问题
写了一个日期控件,然后用一个CustomValidator控件来做日期格式check,其中调用一段正则表达式:
var   r   =   arguments.Value.match(/^(\d{1,4})(\/)(\d{2})\2(\d{2})$/);

本来一个正常的日期形式是2007/08/27,如果输入不是这种格式的日期会check住。
但是现在我输入208/03/06,   年份输入三位应该会被check住,怎么就没有呢?
我输入20/03/06,   年份输入两位就check住了,   请问我的正则表达式哪里写错了呢?

------解决方案--------------------
我输入20/03/06, 年份输入两位就check住了
-------------
这个应该是你测试失误吧

如果在你的这个基础上简单修改,那就是这样的

var r = arguments.Value.match(/^(\d{4})(\/)(\d{2})\2(\d{2})$/);

因为你关于年份的部分用了\d{1,4},它的意思是可以为1-4个数字

这样判断的日期不严谨,基本上没起多大作用



------解决方案--------------------
日期验证的正则:
(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)