我在生成一系列日期的正則表達式時遇到問題。 例如,這個範圍[2015-11-17, 2017-10-05]
,我該怎麼辦?驗證是否有日期使用正則表達式登錄到該範圍。用於驗證日期範圍的Java正則表達式
第二個問題是否可以有一個通用的正則表達式,我可以用於多個日期範圍,只用正常範圍替換正則表達式中的幾個值,而正則表達式繼續驗證日期範圍,但與新的範圍。預先感謝幫助=)
我在生成一系列日期的正則表達式時遇到問題。 例如,這個範圍[2015-11-17, 2017-10-05]
,我該怎麼辦?驗證是否有日期使用正則表達式登錄到該範圍。用於驗證日期範圍的Java正則表達式
第二個問題是否可以有一個通用的正則表達式,我可以用於多個日期範圍,只用正常範圍替換正則表達式中的幾個值,而正則表達式繼續驗證日期範圍,但與新的範圍。預先感謝幫助=)
正如註釋狀態,正則表達式是不恰當的日期範圍,也沒有任何時間跨度。從僅考慮文本的語法而不考慮語義(含義)的意義上來說,正則表達式的意圖是「愚蠢的」。
使用內置於Java 8及更高版本中的java.time框架。
將您的字符串解析爲LocalDate
對象。
LocalDate start = LocalDate.parse("2015-11-17");
通過調用isEqual,isBefore和isAfter方法進行比較。
請注意,我們通常在日期時間工作中使用Half-Open方法,其中開頭是包含性的,而結尾是排他性的。
這些問題已經在堆棧溢出的許多其他問題和答案中進行了介紹。所以我在這裏縮小了我的討論範圍。
只是爲了完整:您實際上可以使用正則表達式來識別任何有限的字符串集合,例如特定的日期範圍,但它比實際推薦的用法更像是一次學術練習。 但是,如果你碰巧正在編程一些神祕的硬件,它實際上可能是必要的。
假設輸入是始終在給定格式的有效日期,你的例子正則表達式可以包括:
2015-0[1-9].*
- 2015年一月至九月
2015-10.*
- 2015年10月
2015-11-0[1-9]
- 2015年11月1日至9日
2015-11-1[0-7]
- 2015年11月10日至17日
2016.*
- 2016年的所有日期
類似地爲2017添加,使用| (a | b | c | ...),應用您使用的正則表達式實現的轉義,然後您有日期檢查器。如果輸入不能保證是有效的日期,它會變得更復雜一些,但仍然有可能。
不要使用正則表達式,從字符串中創建一個日期對象並使用API檢查範圍。 – Maroun
正則表達式用於驗證數據的語法,而不是其值。用逗號分隔,解析LocalDate,使用'isBetween(start,end)'。 – Dariusz
使用正則表達式驗證日期範圍是一個非常糟糕的主意。簡單的一年驗證可能會像[this regex]一樣(http:// stackoverflow。COM /問題/ 35825374/PostgreSQL相關的正則表達式替換/ 35825591)。 – 2016-03-08 13:31:24