使用Ruby / FoR - 年份是模型/视图中的字符串。如何验证用户输入的字符串是否为有效的格里高历年?
答案 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)
想要解析字符串中的整数对于Ruby来说是一个非常常见的问题。可能是因为没有完美的方法。也许它值得拥有自己的标签!
Test if a string is basically an integer in quotes using Ruby?
How do I get the second integer in a Ruby string with to_i?
Extract and multiple integers from user-input string in Ruby?
How can I convert an entire line of input into an integer in Ruby?
How do I parse a number from a String that may have a leading zero?
Retrieve number from the string pattern using regular expression