用于指定日期格式的正则表达式

时间:2014-09-17 22:54:03

标签: regex

我为特定日期定义了以下正则表达式:

(0[1-9]|1[012]|[1-9])[\/-]                             
(0[1-9]|1[0-9]|2[0-9]|3[0]|[1-9])[\/-]                 
(18[0-9]+|19[0-9]+|20[0-9]+|0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9])

第一行定义月份,第二行定义日期和第三年格式。

我很满意日期,月份和年份的限制,但我不知道如何拒绝混合格式,如mm / dd-yyyy或mm-dd / yyyy。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以匹配第一个分隔符,然后使用它的后向引用。

 # /(0[1-9]|1[012]|[1-9])([\/-])(0[1-9]|1[0-9]|2[0-9]|3[0]|[1-9])\2(18[0-9]+|19[0-9]+|20[0-9]+|0[1-9]|[1-9][0-9])/

 ( 0 [1-9] | 1 [012] | [1-9] )          # (1), Month
 ( [/-] )                               # (2), Delimiter / or -
 (                                      # (3 start), Day
      0 [1-9] 
   |  1 [0-9] 
   |  2 [0-9] 
   |  3 [0] 
   |  [1-9] 
 )                                      # (3 end)
 \2                                     # Delimiter backreference
 (                                      # (4 start), Year
      18 [0-9]+ 
   |  19 [0-9]+ 
   |  20 [0-9]+ 
   |  0 [1-9] 
   |  [1-9] [0-9]       
 )                                      # (4 end)