我需要检查给定字符串的日期。我得到的字符串不是常规的,并且我不想使用Dateformat
或类似的东西。我试图避免出现多个异常。我需要用于dd.MM.yyyy
和MM.yyyy
和yyyy
的正则表达式。起初我有
\\d+\\.?\\d+\\.?\\d+
但这不起作用。
最佳答案
如果您真的想使用正则表达式,请参考以下基本示例:
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个月)要真正检查日期,我建议您使用为此专门设计的库,例如
DateFormat
,JodaTime
或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;