正則表達式如何匹配日期格式?YYYY-MM-DD示例

要正確匹配 yyyy-mm-dd 格式的日期,需分步驟限制年月日的有效范圍。1. 基礎結構用 d{4}-d{2}-d{2} 匹配格式,但無法排除非法數值;2. 年份限制為 1000~9999 可用 [1-9]d{3};3. 月份限制為 01~12 可用 (0[1-9]|1[0-2]),日期簡化限制為 01~31 可用 (0[1-9]|[12][0-9]|3[01]);4. 組合表達式為 ^[1-9]d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$,但仍需配合程序邏輯驗證真實合法性。

正則表達式如何匹配日期格式?YYYY-MM-DD示例

日期格式的正則匹配,其實不難,但要寫得準確又不漏情況,也得稍微下點功夫。以常見的 YYYY-MM-DD 格式為例,想用正則表達式正確匹配它,不能只看形式,還得考慮月份和日期的有效范圍。

正則表達式如何匹配日期格式?YYYY-MM-DD示例


1. 基礎結構:先匹配格式,不管具體數值

我們先從最基礎的格式入手:

正則表達式如何匹配日期格式?YYYY-MM-DD示例

d{4}-d{2}-d{2}

這個表達式可以匹配類似 2023-05-12 這樣的字符串,但有個問題——它也會匹配像 9999-99-99 這種非法日期。所以這只是“形式上”對了,實際內容可能不合法。


2. 加入年份限制:年份范圍合理一些

年份部分一般為四位數,我們可以接受任意四位數字,但如果想更精確,比如只匹配 1000 到 9999 年,可以用:

正則表達式如何匹配日期格式?YYYY-MM-DD示例

[1-9]d{3}

這樣避免了以 0 開頭的年份(比如 0001),雖然在某些場景中也可以接受,但大多數系統都要求年份是四位且非全零開頭。


3. 控制月份和日期的有效范圍

這才是關鍵難點。月份只能是 01~12,日期根據月份不同也有變化(比如 2 月最多 28 或 29 天,4/6/9/11 月是 30 天等)。但正則處理這些邏輯比較復雜,通常我們會做大致限制,而不是完全驗證日期合法性。

月份限制示例:

(0[1-9]|1[0-2])

表示月份必須是 01 到 12 之間。

日期限制(簡化版):

(0[1-9]|[12][0-9]|3[01])

意思是日期可以是 01~09、10~29(1或2開頭)、30或31。

注意:這沒有考慮每個月的真實天數,比如不會排除 2023-02-30,這種完整校驗最好交給程序邏輯判斷。


4. 組合起來的正則表達式

綜合上面幾點,一個較合理的正則表達式如下:

^[1-9]d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

說明:

  • ^ 和 $ 表示嚴格匹配整個字符串
  • 年份為 1000~9999
  • 月份 01~12
  • 日期 01~31(粗略)

如果你是在代碼里做最終驗證,建議用語言自帶的日期函數再檢查一次,比如 pythondatetime 模塊,或者 JS 中的 Date 對象


基本上就這些。正則能幫你過濾掉明顯錯誤的格式,但復雜的日期邏輯還是交給專門的工具更靠譜。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享