我在Rails项目中遇到了一个问题,我需要一些帮助。我使用strptime函数从输入的字符串时间和目标格式返回一个Date对象:
date = Date.strptime(date, '%Y-%m')
当我传入一个不符合该模式的Date(例如01-01-24)时,它似乎不会抛出ArgumentError让我捕捉和处理任何事情,它确实捕捉了一个无效输入,如下所示:01-2024。我可以在这里做某种验证来捕捉这种错误并检查RegEx模式是否匹配吗?
我在Rails项目中遇到了一个问题,我需要一些帮助。我使用strptime函数从输入的字符串时间和目标格式返回一个Date对象:
date = Date.strptime(date, '%Y-%m')
当我传入一个不符合该模式的Date(例如01-01-24)时,它似乎不会抛出ArgumentError让我捕捉和处理任何事情,它确实捕捉了一个无效输入,如下所示:01-2024。我可以在这里做某种验证来捕捉这种错误并检查RegEx模式是否匹配吗?
2条答案
按热度按时间oxiaedzo1#
Date#strptime
使用'%Y-%m'
作为[year]-[month]
,因此在'01-01-2024'
的情况下,它被视为[01]-[01]-2024
并被解析为该日期结构。strptime
不考虑%Y
的最小宽度,因此当前表达式基本上等效于/\A-?\d+-(?:1[0-2]|0?[1-9])/
(任意位数,后跟连字符,后跟1-12,可选填充0)'01-2024'
只会引发错误,因为20
不是有效的月份。例如:'01-1299'
不会引发错误。您可以使用Regexp来验证您的“日期模式”,而不是依赖于这种天真。
v2g6jxz62#
用撬来调查:
它会抛出Date::Error异常