我的匹配方法分4个部分匹配
1. 匹配含31号的日期
2. 匹配含30号的日期
3. 匹配非闰年2月
4. 匹配闰年2月
以下表达式匹配yyyy-MM-dd/ yyyy-M-d
^((((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?[469]|11)-(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-))$ //var test31=/^((((1[6-9]|[2-9]\d)\d{2})(0?[13578]|1[02])(0?[1-9]|[12]\d|3[01]))$/; //var test30=/^(((1[6-9]|[2-9]\d)\d{2})(0?[469]|11)(0?[1-9]|[12]\d|30))$/; //var test28=/^(((1[6-9]|[2-9]\d)\d{2})0?2(0?[1-9]|1\d|2[0-8]))$/; //var test29=/^(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0?229)$/;
下面是我在oracle数据匹配的,匹配格式是yyyyMMdd
create table tmp_date_test( dateChar varchar2(32) ) insert into tmp_date_test values(20100201); insert into tmp_date_test values(20100229); insert into tmp_date_test values(20101001); insert into tmp_date_test values(20101031); insert into tmp_date_test values(20101101); insert into tmp_date_test values(20101130); insert into tmp_date_test values(20101131); insert into tmp_date_test values(20101032); insert into tmp_date_test values(20080229); insert into tmp_date_test values(10000229); insert into tmp_date_test values(2008229); insert into tmp_date_test values(201021); select *from tmp_date_test where regexp_like(dateChar, '^((((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[469]|11)(0[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})0{1}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))0229))$')