zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0

我们要检验的日期格式:XXXX-XX-XX(X为数字)


[\d]{4}-[\d]{2}-[\d]{2}

这个是我看到的一个日期验证的正则表达式。

看起来能实现,因为

2006-6-6 肯定是不符合的,而

2006-06-06 肯定是符合的。

但是,我们来看,

2006-00-00 也肯定是符合的,但是,有意义吗?

2006-99-99 也肯定是符合的,但是,有意义吗?

答案,大家都知道,肯定没有意义。所以,我觉得这个表达式还有要改进的地方。

问题的关键是数值大小的限制,如何来限制?

我把它改进了一下:

[\d]{4}-[0-1][0-9]-[0-3][0-9]

我们乍一看,觉得可行,

2006-19-39 肯定符合,但是没有意义。

看来,还是有问题。

到现在,我也没有想清楚这个看似简单的问题如何来解决。

 

如果用这个表达式来检验日期的话,是不行的,还需要你进行数值范围的验证。

如果哪位朋友知道的话,请指点一二。谢谢。



|----------------------------------------------------------------------------------------|
                           版权声明  版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2007-03-19 11:07 zhyiwww 阅读(6081) 评论(6)  编辑  收藏 所属分类: 正则表达式

FeedBack:
# re: 疑惑:如何用正则表达式来验证日期
2007-03-19 11:10 | zhyiwww
难道正则表达式只能用来匹配不能用来验证?现在还不明白。
  回复  更多评论
  
# re: 疑惑:如何用正则表达式来验证日期
2007-03-20 08:37 | kawaii
看看这个行吗
[/d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])]  回复  更多评论
  
# re: 疑惑:如何用正则表达式来验证日期
2007-03-20 11:23 | zhyiwww
这个没有问题了,就我们的验证足够了。
现在我们把我们的需求放在一边,就来讨论技术的实现。

如果严格来定义一个合法合理的日期的话,可能还有一个日期不能实现:
2007-02-29
这个日期,上面能验证通过,但是,我们查一下日历就知道,没有29这一天。
现在问题,是,验证日期的合理性,而不仅是验证其合法性的问题了。
如果感兴趣的话,可以思考一下。
这个问题,我也没有想好。
  回复  更多评论
  
# re: 疑惑:如何用正则表达式来验证日期
2007-03-20 11:27 | zhyiwww
现在我们问题是如何用正则表达式来表达闰年和非闰年?
  回复  更多评论
  
# re: 疑惑:如何用正则表达式来验证日期[未登录]
2007-08-29 14:44 | tony
试试这个看看:霍霍!!!
/*
*validate date(include bissextile)
*format: yyyy-MM-dd
*add by tony
*/
function isValidDate(sText) {
var reDate = /^((((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))$/

return reDate.test(sText);
}
若有正则表达式方面交流的意向,可加我的MSN: niitlzm@hotmain.com  回复  更多评论
  
# re: 疑惑:如何用正则表达式来验证日期[未登录]
2008-05-11 22:05 | terry
/^(19[7-9]\d|20[0-5]\d)\-(0?\d|1[0-2])\-([0-2]?\d|3[01])$/  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: