簡體   English   中英

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

[英]Pattern Matches for Date Format: dd.MM.yyyy, MM.yyyy and yyyy

我需要檢查給定字符串的日期。 我得到的字符串不是常規的,並且我不想使用Dateformat或類似的東西。 我試圖避免出現多個異常。 我需要一個用於dd.MM.yyyyMM.yyyyyyyy的正則表達式。 起初我有

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

但這不起作用。

如果您真的想使用regex ,那么這是一個基本的工作示例:

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;

使用DateUtilsmaven鏈接 ):

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;

你可以嘗試以下

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

它將與日期dd-mm-yyyy匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM