在 Java 里用正则校验日期,常见有 两种思路:
下面分别说明。
yyyy-MM-dd 格式(粗略)String regex = "^\\d{4}-\\d{2}-\\d{2}$";
boolean ok = dateStr.matches(regex);
✅ 能校验:
String regex =
"^(?:\\d{4})-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$";
✅ 能排除:
❌ 仍然无法处理:
结论:正则不适合做完整日期合法性校验
java.time,推荐)import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateUtil {
private static final DateTimeFormatter FMT =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static boolean isValidDate(String dateStr) {
if (dateStr == null || !dateStr.matches("^\\d{4}-\\d{2}-\\d{2}$")) {
return false;
}
try {
LocalDate.parse(dateStr, FMT);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
}
✅ 能校验:
2024-02-29 ✅,2023-02-29 ❌)import java.text.SimpleDateFormat;
public static boolean isValidDate(String dateStr) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false); // 关键:不允许自动纠正
try {
sdf.parse(dateStr);
return true;
} catch (Exception e) {
return false;
}
}
| 格式 | 正则 |
|---|---|
| yyyy-MM-dd | ^\d{4}-\d{2}-\d{2}$ |
| yyyy/MM/dd | ^\d{4}/\d{2}/\d{2}$ |
| yyyyMMdd | ^\d{8}$ |
LocalDate如果你有具体格式(如 yyyyMMdd、MM/dd/yyyy)或特殊规则(如限制年份范围),可以告诉我,我可以给你定制正则和代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。