在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可以出現或不出現。
參考:
沒有留言:
張貼留言