我尝试创建一个方法,如果字符串是有效日期,则返回转换为日期的给定字符串,否则返回该字符串。这是代码:
\n\ndef check_string(string)\n if date = (Date.parse(string) rescue nil)\n return date\n end\n string\nend\nRun Code Online (Sandbox Code Playgroud)\n\n当字符串为:
\n\n"An\xc3\xa1lise de Novos M\xc3\xa9todos Gen\xc3\xa9ticos"\nRun Code Online (Sandbox Code Playgroud)\n\n该Date.parse方法返回一个有效日期:
#<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>\nRun Code Online (Sandbox Code Playgroud)\n\n而不是引发异常。
\n确定任意字符串是否对应于有效日期非常复杂。如果可能的话,我强烈建议您将应用程序限制为仅接受更严格、定义明确的格式的日期。
\n\n例如,您可以用来Date.strptime根据特定格式测试字符串。
为了理解这里实际发生了什么,我们可以构建一个最小再现示例:
\n\nDate.parse "An\xc3\xa1lise de Novos M\xc3\xa9todos Gen\xc3\xa9ticos"\n#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>\n\nDate.parse "Nov"\n#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>\nRun Code Online (Sandbox Code Playgroud)\n\n该库正在将此特定字符串解释为“1st December”,因为它包含"Nov".