如何修复日期正则表达式



我试图将regex仅用于dd/MM/yyyy日期格式,但如果我输入dd/MM/yy值,它会接受。我想知道如何使它只接受dd/MM/yyyy值。

如果我使用

new SimpleDateFormat("dd/MM/yyyy").parse(value); 

代码继续接受CCD_ 4格式。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main(String[] args) {
String value = "10/02/20";

Pattern pattern = Pattern.compile("^([0-2][0-9]||3[0-1])/(0[0-9]||1[0-2])/([0-9][0-9])?[0-9][0-9]$");

Matcher matcher = pattern.matcher(value);

System.out.println(matcher.find());
}
}

我建议您从过时且错误的java.util日期时间API和SimpleDateFormat切换到现代的java.time日期时间API和相应的格式API(包,java.time.format(。从跟踪:日期时间了解有关现代日期时间API的更多信息。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Define the format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String dateString;
LocalDate date = null;
boolean valid;
do {
valid = true;
System.out.print("Enter a date in dd/MM/yyyy format: ");
dateString = scanner.nextLine();
try {
// Try to parse the input string
date = LocalDate.parse(dateString, formatter);
} catch (DateTimeParseException e) {
System.out.println("Invalid format");
// Set `valid` to false in case of exception
valid = false;
}
} while (!valid);// Loop as long as valid is false
System.out.println("Date in ISO-8601 format: " + date);
System.out.println("Date in dd/MM/yyyy format: " + date.format(formatter));
}
}

样本运行:

Enter a date in dd/MM/yyyy format: 09/09/20
Invalid format
Enter a date in dd/MM/yyyy format: 09/09/2020
Date in ISO-8601 format: 2020-09-09
Date in dd/MM/yyyy format: 09/09/2020

Regex解决方案:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateString;
boolean valid;
do {
valid = true;
System.out.print("Enter a date in dd/MM/yyyy format: ");
dateString = scanner.nextLine();
if (!dateString.matches("\d{2}\/\d{2}\/\d{4}")) {
System.out.println("Invalid format");
valid = false;
}
} while (!valid);// Loop as long as valid is false
System.out.println(dateString);
}
}

样本运行:

Enter a date in dd/MM/yyyy format: 09/09/20
Invalid format
Enter a date in dd/MM/yyyy format: 09/09/2020
09/09/2020

正则表达式的解释:

  1. d指定一个数字
  2. X{n}指定X, exactly n times

最新更新