It is a common practice to name files using the date as prefix in the following format: YYYYMMDD
, for example: 20170101_results.csv
. A date in such string format can be verified using the following regular expression:
\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])
The above expression considers dates from year: 0000-9999
, months between: 01-12
and days 01-31
.
For example:
> 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
Note: It validates the date syntax, but we can have a wrong date with a valid syntax, for example: 20170229
(2017 it is not a leap year).
> grepl("\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])", "20170229")
[1] TRUE
If you want to validate a date, it can be done via this user defined function:
is.Date <- function(x) {return(!is.na(as.Date(as.character(x), format = '%Y%m%d')))}
Then
> is.Date(c("20170229", "20170101", 20170101))
[1] FALSE TRUE TRUE