2011-11-17 221 views
2

使用正則表達式,我將如何驗證日期以確保僅以此格式輸入:mm/dd/yyyy?使用正則表達式驗證日期格式

如果有人有興趣,我在Ruby模型中使用validates_format_of :date_field, :with => //

+1

正則表達式真的不適合這項工作['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html# method-c-strptime)與適當的格式字符串和異常處理程序會好得多。 –

+0

我需要做的是驗證一個字符串,應格式化爲:(2個數字)/(2個數字)/(4個數字)。 –

+1

但「20/20/2020」不是有效日期。 –

回答

2

@hsz答案是正確的。如果您還需要驗證日期本身,你可以這樣做:

/^(?:0?[1-9]|1[0-2])/(?:0?[1-9]|[1-2]\d|3[01])/\d{4}$/ 

編輯:

由於@Tim說,這將不是100%的正則表達式驗證。看到他的相關答案。

if subject =~ /\A(?:0?[1-9]|1[0-2])\/(?:0?[1-9]|[1-2]\d|3[01])\/\d{4}\Z/ 
    # Successful match 

編輯#2:上面的Ruby特定版本。

+2

這隻會讓你在途中 - 02/31/1234會通過和許多其他無效的日期 - 對於真正的日期驗證,考慮到閏年,你需要一個巨大的正則表達式(這是[可能的,但不是一個好主意](http://stackoverflow.com/questions/4290433/)正則表達式換aspregularexpressionvalidator與 - 格式MMDDYY跨越式Y/4291747#4291747))。最好將驗證留給專門的功能。 –

+0

@TimPietzcker我不會這樣做與正則表達式。我確信有這些模塊或其他更好的方法。 – FailedDev

+0

您可能需要轉義'/'字符。 –

5

正則表達式這種格式可以是這樣的:

^\d{2}\/\d{2}\/\d{4}$ 
+0

我想你在正則表達式中犯了一個錯誤。你需要刪除多餘的'\\'。我試圖解決這個錯誤,但是這些更改被重置爲原來的狀態。 –

+0

主要的錯誤是與行結尾相關:http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html –