在 Java 中,使用 正则表达式(regex)匹配日期通常分两种场景:
2024-01-31)下面按常见格式给你示例。
yyyy-MM-ddString regex = "\\d{4}-\\d{2}-\\d{2}";
示例:
String date = "2024-01-31";
boolean match = date.matches("\\d{4}-\\d{2}-\\d{2}");
⚠️ 缺点:会匹配 2024-13-45 这种非法日期
yyyy-MM-dd(限制月份和日期范围)\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
Java 示例:
String regex = "\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])";
boolean match = "2024-01-31".matches(regex);
✅ 不能匹配 2024-13-40
❌ 但仍可能匹配 2024-02-30
yyyy/MM/ddString regex = "\\d{4}/(0[1-9]|1[0-2])/(0[1-9]|[12]\\d|3[01])";
正则不适合判断闰年、每月天数,建议使用 LocalDate:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String[] args) {
String date = "2024-02-29";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
try {
LocalDate.parse(date, formatter);
System.out.println("合法日期");
} catch (Exception e) {
System.out.println("非法日期");
}
}
}
✅ 自动拒绝:
2024-02-302023-02-29String regex = "\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])";
if (date.matches(regex)) {
try {
LocalDate.parse(date);
} catch (Exception e) {
// 非法真实日期
}
}
| 格式 | 正则 |
|---|---|
| yyyy-MM-dd | \d{4}-\d{2}-\d{2} |
| yyyy/MM/dd | \d{4}/\d{2}/\d{2} |
| yyyyMMdd | \d{8} |
| dd-MM-yyyy | \d{2}-\d{2}-\d{4} |
如果你有 特定格式(比如 2024年01月31日、带时间、带时区),可以告诉我,我帮你写对应正则。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。