我试过这个版本的正则表达式:
^(((((0[1-9])|(1\d)|(2[0-8]))-((0[1-9])|(1[0-2])))|((31-((0[13578])|(1[02])))|((29|30)-((0[1,3-9])|(1[0-2])))))-((20[0-9][0-9]))|(29-02-20(([02468][048])|([13579][26]))))$
答案 0 :(得分:1)
不要使用正则表达式进行日期解析,请使用日期解析器,例如SimpleDateFormat.parse()
答案 1 :(得分:0)
检查字符串格式:
^[0-9]{2}-[0-9]{2}-[0-9]{4}$
然后使用以下方式验证您的日期:
new SimpleDateFormat("dd-MM-yyyy").parse(yourDateString);
答案 2 :(得分:0)
快速浏览一下,以下内容应该有效:
(0[1-9]|[1-2][0-9]|3[01])\-(0[1-9]|1[0-2])\-(\d{4})
乍一看,你会发现这并没有像试图匹配31-02-2008
那样停止,即:即2月31日,这是一个无效的日期。
正如其他人所说,如果可能的话,最好使用类似SimpleDateFormat.parse()
的内容,因为它会涵盖日/月的变化,更有可能涵盖闰年等事情。