2015-08-21 81 views
0
matchData = Regexp.new(/\d{4}-\d{2}-\d{2}\D\d{2}:\d{2}:\d{2}\D/) 


puts matchData.match("2015-08-21T13:54:29Z") 

if (!matchData || (matchData.size==0)) 
puts "here" 
end 

我有一個日期格式,我試圖檢查它是否返回nil或不。現在它匹配我希望它匹配的內容,但是當它不匹配(日期格式)時,我似乎無法找到它返回的內容。這只是空白,但它不是零。有什麼方法可以用來檢查長度嗎?看正則表達式是否返回Ruby中沒有匹配

回答

3

如果你只是要檢查是否匹配,你可以做這樣的:

if "string" =~ /regex/ 
    # do something 
end 

關於爲什麼你的例子不工作:你叫什麼matchData是正則表達式,你永遠保存參考到實際MatchData。什麼,你想說的是:

regex = Regexp.new(/\d{4}-\d{2}-\d{2}\D\d{2}:\d{2}:\d{2}\D/) 
matchData = regex.match("2015-08-21T13:54:29Z") 

puts "here" unless matchData 
0

如果我正確理解你的問題,你應該使用DateTime::strptime(而不是一個正則表達式):

require 'date' 

dt = DateTime.strptime('2015-08-21T13:54:29Z', '%Y-%m-%dT%H:%M:%S%z') 
    #=> #<DateTime: 2015-08-21T13:54:29+00:00 ((2457256j,50069s,0n),+0s,2299161j)> 

這不僅告訴你是否字符串包含日期和時間以指定的格式(如果沒有,strptime引發ArgumentError: invalid date異常你最好rescue),但如果它確實日期和時間元素的解析爲您完成:

d = dt.to_date 
    #=> #<Date: 2015-08-21 ((2457256j,0s,0n),+0s,2299161j)> 
d.year #=> 2015 
d.month #=> 8 
d.day #=> 21 
d.wday #=> 5 

t = dt.to_time 
    #=> 2015-08-21 06:54:29 -0700 
t.hour #=> 6 
t.min #=> 54 
t.sec #=> 29