我从数据库的一个变量中获取了一个日期字段,目前我使用以下代码检查日期是否为"yyyy-mm-dd“格式
if ( $dat =~ /\d{3,}-\d\d-\d\d/ )我的问题是,有没有更好的方法来实现这一点。
非常感谢
发布于 2009-05-13 20:31:50
正如其他人所指出的,如果这是一个来自数据库的日期字段,那么它应该是一个定义良好的格式,所以您可以使用一个简单的正则表达式,比如toolkit提供的正则表达式。
但这有一个缺点,即它将接受无效的日期,如2009-02-30。同样,如果您正在处理的日期成功地变成了数据库中的日期类型字段,那么您应该是安全的。
更健壮的方法是使用来自CPAN的许多日期/时间模块中的一个。Date::Manip可能是一个很好的选择,尤其是查看ParseDate()函数。
http://metacpan.org/pod/Date::Manip
发布于 2009-05-13 11:19:40
OWASP Validation Regex Repository版本的日期为美国格式,支持闰年:
^(?:(?:(?:0?13578|102)(/|-|.)31)\1|(?:(?:0?1,3-9|10-2)(/|-|.)(?:29|30)\2))(?:(?:16-9|2-9\d)?\d{2})$|^(?:0?2(/|-|.)29\3(?:(?:(?:16-9|2-9\d)?(?:048|2468|13579)|(?:(?:16|2468|3579)00))))$|^(?:(?:0?1-9)|(?:10-2))(/|-|.)(?:0?1-9|1\d|20-8)\4(?:(?:16-9|2-9\d)?\d{2})$
该Regular Expression Library包含一个与其他建议类似的更简单的版本,该版本被翻译为您的问题:
^\d{4}-\d{1,2}-\d{1,2}$发布于 2009-05-13 11:06:46
怎么样
/\d{2}\d{2}?-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/https://stackoverflow.com/questions/857308
复制相似问题