如何验证字符串是一年

时间:2009-09-14 20:40:08

标签: ruby-on-rails ruby

使用Ruby / FoR - 年份是模型/视图中的字符串。如何验证用户输入的字符串是否为有效的格里高历年?

6 个答案:

答案 0 :(得分:4)

听起来更直接的问题是:如何验证用户输入的字符串对应于1582到2500之间的数字(比方说)。你可以这样做:

 date_string.scan(/\D/).empty? and (1582..2500).include?(date_string.to_i)

这样,您可以选择合理的年份 - 例如,800在您的应用程序中是否真的是一个有效的答案?还是3000?

答案 1 :(得分:4)

这是一种方法:

Date.strptime(date_str, "%Y").gregorian?

请注意,如果字符串采用意外格式,则会抛出异常。另一个(更宽容)的选择是:

Date.new(date_str.to_i).gregorian?

答案 2 :(得分:3)

以一点点聪明/正则表达式魔法为代价,以下内容将允许您不仅测试字符串是否为数字(作为有效年份的第一个标准),而且还测试它是否属于特定年份:

def is_valid_year?(date_str, start=1900, end=2099)
  date_str.grep(/^(\d)+$/) {|date_str| (start..end).include?(date_str.to_i) }.first
end

上述函数返回nil表示任何带有非数字字符的字符串,false表示数字但超出提供范围的字符串,true表示有效年份字符串。

答案 3 :(得分:2)

@rcoder接受的答案将无法正常工作,因为我在rails 4+上测试过 我做了另一个简单的。

def is_valid_year? year
  return false if year.to_i.to_s != year
  year.strip.to_i.between?(1800, 2999)
end

不接受字符的第一行,您也可以根据需要更改范围

答案 4 :(得分:0)

Date.parse(string_of_date).gregorian?

另外,请查看Date class的文档。

答案 5 :(得分:0)