2011-05-19 105 views
2

我正在尋找一個正則表達式的字符串,將驗證格式爲YYYYMMDD(沒有分隔符)的日期,適用於閏年。我發現的最接近的事情到目前爲止只驗證日期自2000年以來正則表達式驗證日期爲年月日

import java.util.regex.Pattern; 

public class TestDate { 
    public static final Pattern datePattern = Pattern.compile("** Need RegEx **"); 

    public static void main(String[] args) { 
    System.out.println(datePattern.matcher("19960229").matches()); 
    } 
} 
+12

你真的*有*使用正則表達式?一個絕對準確的將非常複雜,而不僅僅是使用日期解析器。 – 2011-05-19 13:18:32

回答

8

我建議使用java.text.DateFormat如圖this page

public static boolean isValidDateStr(String date) { 
    try { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
     sdf.setLenient(false); 
     sdf.parse(date); 
    } 
    catch (ParseException e) { 
     return false; 
    } 
    catch (IllegalArgumentException e) { 
     return false; 
    } 
    return true; 
    } 
2

我的東西使用正則表達式這幾乎是不可能的,因閏年所需的複雜計算。喬恩Skeet是正確的:使用new SimpleDateFormat("yyyyMMdd")爲此。

1

正則表達式爲閏年是非常複雜的:案例分析:(這也採用了全日檢查)

"(((\\d\\d)(0[48]|[2468][048]|[13579][26])|([02468][048]|[13579][26])(00))(02)([012]\\d))|(\\d\\d([02468][1235679]|[13579][01345789])(02)([01]\\d|2[]))|(\\d\\d\\d\\d((0[13578]|1[02])([012]\\d|3[01])|((0[46]|11)([012]\\d|30))))" 

首節00

在一般的情況下分離出非結局第二部分處理的世紀年份所以只有通過多年的400 divisable是閏年(1900是不是閏年)

然後在最後一節處理所有其他月份

(我真的不考這個,但它應該工作足夠接近)

相關問題