以 YYYYMMDD 格式验证日期

通常的做法是使用日期作为前缀命名文件,格式如下:YYYYMMDD,例如:20170101_results.csv。可以使用以下正则表达式验证此类字符串格式的日期:

\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])

上面的表达式考虑了年份的日期:0000-9999,介于:01-12 和 days 01-31 之间的月份。

例如:

> grepl("\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])", "20170101")
[1] TRUE
> grepl("\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])", "20171206")
[1] TRUE
> grepl("\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])", "29991231")
[1] TRUE

注意 :它验证日期语法,但我们可能使用有效语法的日期错误,例如:20170229(2017 年不是闰年)。

> grepl("\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])", "20170229")
[1] TRUE

如果要验证日期,可以通过此用户定义的函数完成:

is.Date <- function(x) {return(!is.na(as.Date(as.character(x), format = '%Y%m%d')))}

然后

> is.Date(c("20170229", "20170101", 20170101))
[1] FALSE  TRUE  TRUE