日期格式的模式匹配:dd.MM.yyyy,MM.yyyy和yyyy

时间:2017-03-24 09:16:26

标签: java date

我需要检查给定字符串的日期。我得到的字符串不规则,我不想使用Dateformat或类似的东西。我试图避免多个例外。我需要dd.MM.yyyyMM.yyyy以及yyyy的正则表达式。起初我有

\\d+\\.?\\d+\\.?\\d+ 

但这不起作用。

2 个答案:

答案 0 :(得分:2)

如果你真的想使用正则表达式,这是一个基本的工作示例:

String regex = "([0-9]{2}\\.){0,2}([0-9]{4})";
assert "03.2017".matches(regex);
assert "31.03.2017".matches(regex);
assert "2017".matches(regex);
assert !"23-2017".matches(regex);

请注意:

  • 只检查在正确位置有数字
  • 它不会检测不正确的年份(例如0013)或不正确的日期/月份(第45天或第15个月)

要真正检查日期,我建议您使用专为此设置的库,例如DateFormatJodaTime或apache的DateUtils

使用 DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[[dd.]MM.]yyyy");
// correct dates
assert formatter.parse("31.12.2017") != null;
assert formatter.parse("12.2017") != null;
assert formatter.parse("2017") != null;
// wrong date
assert formatter.parse("31.2017") == null;

使用 DateUtils maven link):

String[] acceptedFormats = {"dd.MM.yyyy", "dd.MM.yyyy", "dd/MM/yyyy"};

// correct dates
assert DateUtils.parseDate("07.12.2017", acceptedFormats) != null;
assert DateUtils.parseDate("07.2017", acceptedFormats) != null;
assert DateUtils.parseDate("2017", acceptedFormats) != null;
assert DateUtils.parseDate("2017", acceptedFormats) != null;
// wrong dates
assert DateUtils.parseDate("123.2012", acceptedFormats) == null;
assert DateUtils.parseDate("01.13.2012", acceptedFormats) == null;

答案 1 :(得分:0)

你可以试试下面的

String regex = "([0-9]{2})-([0-9]{2})-([0-9]{4})";

将匹配日期dd-mm-yyyy