原文: https://howtodoinjava.com/regex/java-regex-date-format-validation/

在使用正则表达式进行的 Java 日期验证中,我们将学习验证简单的日期格式,例如mm/dd/yymm/dd/yyyydd/mm/yydd mm/yyyy。 在这里,我们想使用一个正则表达式来简单地检查输入是否为有效日期,而不尝试消除诸如 2 月 31 日这样的东西。

我们可能会认为,对于日期表达式而言,从概念上讲微不足道的事情应该是一件容易的事。 但事实并非如此。 主要问题是正则表达式不能直接处理数字。

我们不能告诉正则表达式“匹配 1 到 31 之间的数字”。 而是正则表达式逐个字符地工作。

我们使用'3[01]|[12][0-9]|0?[1-9]'来匹配 3,后跟 0 或 1,或者匹配 1 或 2,后跟任意数字,或者匹配一个可选的 0,后跟 1 到 9。因此,您必须选择您希望您的正则表达式的简单或准确的程度。

1. Java 日期验证正则表达式 – 允许省略前导零

正则表达式:^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}$

  1. List dates = new ArrayList();
  2. dates.add("1/1/11");
  3. dates.add("01/01/11");
  4. dates.add("01/01/2011");
  5. dates.add("01/1/2011");
  6. dates.add("1/11/2011");
  7. dates.add("1/11/11");
  8. dates.add("11/1/11");
  9. String regex = "^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}$";
  10. Pattern pattern = Pattern.compile(regex);
  11. for(String date : dates)
  12. {
  13. Matcher matcher = pattern.matcher(date);
  14. System.out.println(date +" : "+ matcher.matches());
  15. }

程序输出。

  1. 1/1/11 : true
  2. 01/01/11 : true
  3. 01/01/2011 : true
  4. 01/1/2011 : true
  5. 1/11/2011 : true
  6. 1/11/11 : true
  7. 11/1/11 : true

2. Java 日期验证正则表达式 – 要求前导零

正则表达式:^[0-3][0-9]/[0-3][0-9]/(?:[0-9][0-9])?[0-9][0-9]$

  1. List dates = new ArrayList();
  2. //With leading zeros
  3. dates.add("01/01/11");
  4. dates.add("01/01/2011");
  5. //Missing leading zeros
  6. dates.add("1/1/11");
  7. dates.add("01/1/2011");
  8. dates.add("1/11/2011");
  9. dates.add("1/11/11");
  10. dates.add("11/1/11");
  11. String regex = "^[0-3][0-9]/[0-3][0-9]/(?:[0-9][0-9])?[0-9][0-9]$";
  12. Pattern pattern = Pattern.compile(regex);
  13. for(String date : dates)
  14. {
  15. Matcher matcher = pattern.matcher(date);
  16. System.out.println(date +" : "+ matcher.matches());
  17. }

程序输出:

  1. 01/01/11 : true
  2. 01/01/2011 : true
  3. 1/1/11 : false
  4. 01/1/2011 : false
  5. 1/11/2011 : false
  6. 1/11/11 : false
  7. 11/1/11 : false

3. Java 日期验证正则表达式 – 将mm/dd/yyyy与所需的前导零匹配

正则表达式:^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$

验证日期格式mm/dd/yyyy的 Java 程序。

  1. List dates = new ArrayList();
  2. //With leading zeros
  3. dates.add("01/01/11");
  4. dates.add("01/01/2011");
  5. //Missing leading zeros
  6. dates.add("1/1/11");
  7. dates.add("01/1/2011");
  8. String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
  9. Pattern pattern = Pattern.compile(regex);
  10. for(String date : dates)
  11. {
  12. Matcher matcher = pattern.matcher(date);
  13. System.out.println(date +" : "+ matcher.matches());
  14. }

程序输出:

  1. 01/01/11 : false
  2. 01/01/2011 : true
  3. 1/1/11 : false
  4. 01/1/2011 : false

4. Java 日期验证正则表达式 – 将dd/mm/yyyy与所需的前导零匹配

用于验证日期格式dd/mm/yyyy的正则表达式。

正则表达式:^(3[01]|[12][0-9]|0[1-9])/(1[0-2]|0[1-9])/[0-9]{4}$

  1. List dates = new ArrayList();
  2. //With leading zeros
  3. dates.add("07/13/2011");
  4. dates.add("13/07/2011");
  5. //Missing leading zeros
  6. dates.add("1/1/11");
  7. dates.add("01/1/2011");
  8. String regex = "^(3[01]|[12][0-9]|0[1-9])/(1[0-2]|0[1-9])/[0-9]{4}$";
  9. Pattern pattern = Pattern.compile(regex);
  10. for(String date : dates)
  11. {
  12. Matcher matcher = pattern.matcher(date);
  13. System.out.println(date +" : "+ matcher.matches());
  14. }

程序输出:

  1. 07/13/2011 : false
  2. 13/07/2011 : true
  3. 1/1/11 : false
  4. 01/1/2011 : false

可以随意使用和编辑上述正则表达式来进行日期验证,以满足您的需求。

学习愉快!