以 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