Я разрабатываю приложение Ruby on Rails, в котором используется особый формат даты. Рассматриваемый формат даты - год.месяц.день, и дата может быть:
Год.месяц.день Год.месяц Год
Я работаю над методом проверки, который должен проверять формат и, если дата ввода соответствует любому из этих форматов, сделать ее действительной. Пока мой код:
def data_format_correct
regexymd = /[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}/
regexym = /[0-9]{4}[.][0-9]{1,2}/
regexy = /[0-9]{4}/
if :data.to_s =~ regexymd
return true
elsif :data.to_s =~ regexym
return true
elsif :data.to_s =~ regexy
return true
else
errors.add(:data)
return
end
конец
Каждый раз, когда я помещаю дату в форму, возникает ошибка else case. Я почти уверен, что мой код правильный. Я что-то упускаю?
Изменить:
Решение найдено. Работает так:
regexymd = /^[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}$/
regexym = /^[0-9]{4}[.][0-9]{1,2}$/
regexy = /^[0-9]{4}$/
regex_final = Regexp.union(regexymd, regexym)
regex_final = Regexp.union(regex_final, regexy)
validates :data, :format => { :with => regex_final }
Надеюсь, что это поможет любому в такой же ситуации, как у меня. Спасибо за ответы. Я ценю обратную связь.