35
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyでdateのvalidationをする

Last updated at Posted at 2016-09-28

 Rubyで、渡ってきた文字列が正当なdateである場合だけtrueを返し、その他の場合はfalseを返すvalidatorを作りました。
 Ruby on Railsなどで活用できると思われます。というかRailsで使うために作りました。
 gemとかがオーバーキルっぽい時に。

require 'date'

# 日付のvalidationを行う関数
# strに不正な文字列や文字列以外が渡ってきた場合rescueが動き、
# 不正な日付(2016-2-31など)が渡ってきた場合
# Date.valid_date?でfalseが返る
private def date_valid?(str)
  begin
    y, m, d = str.split("-").map(&:to_i)
    return Date.valid_date?(y, m, d)
  rescue
    return false
  end
end

追記

 コメント欄でのご指摘を受け、次のようなコードにしてみました。

require 'date'

private def date_valid?(str)
  !! Date.parse(str) rescue false
end

 こうすることで、様々な日付フォーマットを受け入れられるようになりました。
 また、trueオブジェクトに!!をかけることで、trueが返ってくるのも勉強になりました。
 ありがとうございます。

!! object #=> true_objectの場合true、false_objectの場合falseになる仕組み

 まず、! objectが評価され、objectをtruefalseに変換してしまいます。
 今回返ってくることが期待されているDateオブジェクトはtrueオブジェクトなので、ここでfalseが返り、そして更に!をかけることでtrueが返るようになります。
 もし、期待されていないNilオブジェクトが返ってきた場合、Nilオブジェクトはfalseオブジェクトなのでtrueが返り、更に!をかけるとfalseになります。

35
26
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?