2013-12-12 101 views
0

如何將正則表達式從java的正則表達式驗證日期爲1900-9999的年月日

^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-2099 

上面一個完美的作品進行轉換,只是想更改日期格式1900-9999.So去下面的一個。

我想這樣它不工作

^(([19-99])\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-9999 

什麼是錯了,請指導我解決這個問題。

+0

請提供樣本輸入和期望輸出以使事情更加清晰 –

+0

'^(19 \ d {2} | [2-9] \ d {3})$' – Marc

+0

@AnkurShanbhag輸入日期(yyyyMMdd)是19000130- 99991231 – sunleo

回答

4

甚至不使用正則表達式來驗證整數範圍(這是維護地獄後,就像你現在有)。相反,解析您的字符串更精確的東西像日期或整數,並使用<<=>>=運營商。

int year = Integer.parseInt(yourYear) 
if (year >= 1900 && year <= 9999){ 
    //do your job here 
} 

但是,如果你沒有選擇,你必須用正則表達式做到這一點,你可以用
19\\d\\d|[2-9]\\d\\d\\d嘗試,你可以想像爲

19xx <-> 1 9 \\d \\d 
2xxx <-> [2-9] \\d \\d \\d 
3xxx <-> [2-9] \\d \\d \\d 
4xxx <-> [2-9] \\d \\d \\d 
5xxx <-> [2-9] \\d \\d \\d 
6xxx <-> [2-9] \\d \\d \\d 
7xxx <-> [2-9] \\d \\d \\d 
8xxx <-> [2-9] \\d \\d \\d 
9xxx <-> [2-9] \\d \\d \\d 

短一點的正則表達式可能是19\\d{2}|[2-9]\\d{3}

0

[19-99]character class運營商[..]的錯誤用法。該部分將與1,999(即,僅19)的組中的一個字符匹配。

我不知道爲什麼top(「working」)表達式如此複雜。你可以只用

\b(19|20)\d\d\b 

爲1900年至2099年,並

\b19\d\d\b 

爲1900-1999。雙轉義mybacklashes在Java字符串中使用。

(...之後另一個問題變化)

和1900-9999,只需使用

\b(19|[2-9]9)\d{2}\b 
+0

感謝您的回覆,不是1900-1999,而是1900-9999。 – sunleo

0

表達看起來是這樣的:

^(19|[2-9]\\d)\\d{2}$ 

對於解釋:

^:字符串開頭
(19|[2-9]\\d):要麼值19或值2099
\\d{2}:值0099
$:字符串的結尾

相關問題