当前位置: 代码迷 >> ASP.NET >> |zyciis| 一个日期正则 2008-02-29日通不过 大家帮改改解决办法
  详细解决方案

|zyciis| 一个日期正则 2008-02-29日通不过 大家帮改改解决办法

热度:9744   发布时间:2013-02-25 00:00:00.0
|zyciis| 一个日期正则 2008-02-29日通不过 大家帮改改
^((((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-))$

谢谢 要怎么改

------解决方案--------------------------------------------------------
真的不会改,
帮你顶
------解决方案--------------------------------------------------------
/(^[0-9]{3,4}-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^([0-9]{3,4})[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)|(^0{0,1}15[0-9]{9}$)/
------解决方案--------------------------------------------------------
发错了~~
------解决方案--------------------------------------------------------
/^(d{1,4})(-|/)(d{1,2})2(d{1,2})$/
------解决方案--------------------------------------------------------
^((((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-))$
------解决方案--------------------------------------------------------
这个主要是没有考虑到闰年,不过用正则来判断是否闰年并匹配,我看有点难(至少我不知道)
我的建议,你可以先进行匹配,然后自己判断是否闰年来看看,2 月分的是不是29

^((((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 ¦[color=#00FF00]2[0-8]))[/color] ¦(((1[6-9] ¦[2-9]\d)(0[48] ¦[2468][048] ¦[13579][26]) ¦((16 ¦[2468][048] ¦[3579][26])00))-0?2-29-))$ 

红色那段,就是用来匹配2 月分的,绿色那个就是匹配,是28还是29,你把[0-8]改成[0-9]就可以匹配29号了
------解决方案--------------------------------------------------------
不能嵌套颜色的样子?那用加粗试试

^((((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-))$ 

------解决方案--------------------------------------------------------
不要用正则,好麻烦啊,用DateTime.Parse()强制软换下,成功就证明通过了啊
------解决方案--------------------------------------------------------
最后那个29后面多了一个"-",把那个横线去掉
  相关解决方案