我尝试创建一个方法,如果字符串是有效日期,则返回转换为日期的给定字符串,否则返回字符串。这是代码:
def check_string(string)
if date = (Date.parse(string) rescue nil)
return date
end
string
end
当字符串是:
"Análise de Novos Métodos Genéticos"
Date.parse
方法返回有效日期:
#<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>
而不是引发异常。
最佳答案
确定一个任意字符串是否对应于一个有效日期是极其复杂的。如果可能的话,我强烈建议您将您的应用程序限制为仅接受更严格、定义更明确的格式的日期。
例如,您可以使用 Date.strptime
根据特定格式测试字符串。
要了解此处实际发生的情况,我们可以构造一个最小 复制示例:
Date.parse "Análise de Novos Métodos Genéticos"
#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>
Date.parse "Nov"
#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>
库将此特定字符串解释为“1st November”,因为它包含 “Nov”
。
关于ruby - 为什么 'Date.parse' 不引发无效日期字符串的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201628/