温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用java正则校验日期

发布时间:2026-09-14 06:30:33 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 里用正则校验日期,常见有 两种思路:

  1. 仅用正则做“格式+范围粗略校验”(简单,但不严谨)
  2. 正则校验格式 + Java 日期类做真实合法性校验(推荐)

下面分别说明。


一、仅用正则校验(不推荐用于业务)

1. 校验 yyyy-MM-dd 格式(粗略)

String regex = "^\\d{4}-\\d{2}-\\d{2}$";
boolean ok = dateStr.matches(regex);

✅ 能校验:

  • 2024-01-01 ❌ 不能校验:
  • 2024-13-01(月份错误)
  • 2024-02-30(日期不存在)

2. 稍微严谨一点的正则(仍不完美)

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

✅ 能排除:

  • 月份 > 12
  • 日期 > 31

❌ 仍然无法处理:

  • 闰年
  • 2 月天数
  • 30 / 31 天月份差异

结论:正则不适合做完整日期合法性校验


二、推荐方式:正则 + Java 日期 API(最稳妥)

✅ Java 8+(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 ❌)

✅ 旧项目(Java 7 及以下)

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)或特殊规则(如限制年份范围),可以告诉我,我可以给你定制正则和代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手