有没有办法查看字符串是否是ruby中的有效月份名称?
答案 0 :(得分:6)
你可以这样做:
require 'date'
Date::MONTHNAMES.include? string
请注意,如果字符串为true
,则会返回nil
。所有月份名称都是大写的,所以如果您不关心案例:
Date::MONTHNAMES.include?(string && string.capitalize)
如果你想让nil返回false:
!!string && Date::MONTHNAMES.include?(string.capitalize)
答案 1 :(得分:1)
我将使用方法#grep
。它将验证所有可能的月份字符串。
require 'date'
Date::MONTHNAMES.grep(Regexp.new(string, true)).empty?
如果上述方法返回true
,则表示该字符串不是有效月份名称,否则为。
我将第二个参数传递给方法Regexp::new
true
,以使正则表达式模式不区分大小写
答案 2 :(得分:1)
尝试使用Date.parse
方法。这比使用Date::MONTHNAMES.include? string
有好处,因为它会考虑到短线月份字符串(例如:jun,aug,dec等)。
require 'date'
if (Date.parse(string) rescue false)
# code for valid month string
else
# code for invalid month string
end
答案 3 :(得分:0)
你也可以使用正则表达式
months_regex = /(Jan|Febr)uary|March|April|May|June|July|August|September|(Octo|Novem|Decem)ber/
string =~ regex
如果匹配,则位置0将返回,否则将返回nill