使用正則表達式,我將如何驗證日期以確保僅以此格式輸入:mm/dd/yyyy?使用正則表達式驗證日期格式
如果有人有興趣,我在Ruby模型中使用validates_format_of :date_field, :with => //
。
使用正則表達式,我將如何驗證日期以確保僅以此格式輸入:mm/dd/yyyy?使用正則表達式驗證日期格式
如果有人有興趣,我在Ruby模型中使用validates_format_of :date_field, :with => //
。
@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特定版本。
這隻會讓你在途中 - 02/31/1234會通過和許多其他無效的日期 - 對於真正的日期驗證,考慮到閏年,你需要一個巨大的正則表達式(這是[可能的,但不是一個好主意](http://stackoverflow.com/questions/4290433/)正則表達式換aspregularexpressionvalidator與 - 格式MMDDYY跨越式Y/4291747#4291747))。最好將驗證留給專門的功能。 –
@TimPietzcker我不會這樣做與正則表達式。我確信有這些模塊或其他更好的方法。 – FailedDev
您可能需要轉義'/'字符。 –
正則表達式這種格式可以是這樣的:
^\d{2}\/\d{2}\/\d{4}$
我想你在正則表達式中犯了一個錯誤。你需要刪除多餘的'\\'。我試圖解決這個錯誤,但是這些更改被重置爲原來的狀態。 –
主要的錯誤是與行結尾相關:http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html –
正則表達式真的不適合這項工作['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html# method-c-strptime)與適當的格式字符串和異常處理程序會好得多。 –
我需要做的是驗證一個字符串,應格式化爲:(2個數字)/(2個數字)/(4個數字)。 –
但「20/20/2020」不是有效日期。 –