^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$
一般用上面这个应该就能验证了.
当然更严格地如判断2009-13-05这种13月的错误,那就需要进一步完善了.
string pat =@"^\d{4}(?<cc>[-/.])((1[0-2])|(0?\d))\k<cc>(([12]\d)|(3[01])|(0?\d)) (([0-1]\d)|(2[0-3]))(:[0-5]\d){2}$";
if (Regex.IsMatch(str, pat))
{
Response.Write("yes");
}
else
{
Response.Write("no");
}vs2008测试通过
bug:不能判断2月30这种不存在的日期~