# 使用 Java 正则表达式进行日期验证

> 原文： [https://howtodoinjava.com/regex/java-regex-date-format-validation/](https://howtodoinjava.com/regex/java-regex-date-format-validation/)

在使用正则表达式进行的 **Java 日期验证**中，我们将学习验证简单的日期格式，例如`mm/dd/yy`，`mm/dd/yyyy`，`dd/mm/yy`和`dd 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}$`

```java
List dates = new ArrayList();
dates.add("1/1/11");
dates.add("01/01/11");
dates.add("01/01/2011");
dates.add("01/1/2011");
dates.add("1/11/2011");
dates.add("1/11/11");
dates.add("11/1/11");

String regex = "^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}$";

Pattern pattern = Pattern.compile(regex);

for(String date : dates)
{
	Matcher matcher = pattern.matcher(date);
	System.out.println(date +" : "+ matcher.matches());
}

```

程序输出。

```java
1/1/11 : 		true
01/01/11 : 		true
01/01/2011 : 	true
01/1/2011 : 	true
1/11/2011 : 	true
1/11/11 : 		true
11/1/11 : 		true

```

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

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

```java
List dates = new ArrayList();

//With leading zeros
dates.add("01/01/11");
dates.add("01/01/2011");

//Missing leading zeros
dates.add("1/1/11");
dates.add("01/1/2011");
dates.add("1/11/2011");
dates.add("1/11/11");
dates.add("11/1/11");

String regex = "^[0-3][0-9]/[0-3][0-9]/(?:[0-9][0-9])?[0-9][0-9]$";

Pattern pattern = Pattern.compile(regex);

for(String date : dates)
{
	Matcher matcher = pattern.matcher(date);
	System.out.println(date +" : "+ matcher.matches());
}

```

程序输出：

```java
01/01/11 : 		true
01/01/2011 : 	true

1/1/11 : 		false
01/1/2011 : 	false
1/11/2011 : 	false
1/11/11 : 		false
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 程序。

```java
List dates = new ArrayList();

//With leading zeros
dates.add("01/01/11");
dates.add("01/01/2011");

//Missing leading zeros
dates.add("1/1/11");
dates.add("01/1/2011");

String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";

Pattern pattern = Pattern.compile(regex);

for(String date : dates)
{
	Matcher matcher = pattern.matcher(date);
	System.out.println(date +" : "+ matcher.matches());
}

```

程序输出：

```java
01/01/11 : 		false
01/01/2011 : 	true
1/1/11 : 		false
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}$`

```java
List dates = new ArrayList();
//With leading zeros
dates.add("07/13/2011");
dates.add("13/07/2011");
//Missing leading zeros
dates.add("1/1/11");
dates.add("01/1/2011");

String regex = "^(3[01]|[12][0-9]|0[1-9])/(1[0-2]|0[1-9])/[0-9]{4}$";

Pattern pattern = Pattern.compile(regex);

for(String date : dates)
{
	Matcher matcher = pattern.matcher(date);
	System.out.println(date +" : "+ matcher.matches());
}

```

程序输出：

```java
07/13/2011 : 	false
13/07/2011 : 	true
1/1/11 : 		false
01/1/2011 : 	false

```

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

学习愉快！