在Java驗證日期格式的Regex範例如下。
String regex = "^\\d{4}[\\-/\\.](0?[1-9]|1[012])[\\-/\\.](0?[1-9]|[12][0-9]|3[01])$";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher("2017-09-19").find()); // true
System.out.println(p.matcher("2017/09/19").find()); // true
System.out.println(p.matcher("2017.09.19").find()); // true
System.out.println(p.matcher("2017-9-19").find()); // true
System.out.println(p.matcher("2017-9-1").find()); // true
System.out.println(p.matcher("2017-13-12").find()); // false
System.out.println(p.matcher("2017-9-32").find()); // false
用來分隔年月日的符號可以是-
,/
或.
但上面範例並沒有考慮2月只有28日及閏年(leap year)會有29日的情況。
若要驗證民國日期格式,只要把前面年\\d{4}
的部分改成\\d{2,3}
即可。
String regex = "^\\d{2,3}[\\-/\\.](0?[1-9]|1[012])[\\-/\\.](0?[1-9]|[12][0-9]|3[01])$"; // 民國日期格式
簡單說明一下regex各符號的意義
^
代表開始的匹配。$
代表結尾的匹配。\\d
代表匹配數字,同等於[0-9]
。\\d
後接的大括弧{4}
中的數字代表前面符號要出現的次數,所以//d{4}
代表可出現4次數字,例如2017或1996都匹配。- 中括弧
[...]
代表之中的任一,所以[\\-/\\.]
代表-
,/
或.
任一都匹配。 ?
前面的符號可出現一次或不出現,所以0?
代表0可以出現或不出現。
參考:
沒有留言:
張貼留言