4.7. Validate ISO 8601 Dates and Times
Problem
You want to match dates and/or times in the official ISO
8601 format, which is the basis for many standardized date and time
formats. For example, in XML Schema, the built-in date, time, and dateTime types are all based on ISO 8601.
Solution
The ISO 8601 standard defines a wide range of date and time formats. Most applications that use ISO 8601 only use a subset of it. These solutions match the most commonly used ISO 8601 date and time formats. We’ve also added solutions for XML Schema, which is one particular implementation of ISO 8601.
Dates
The following matches a calendar month (e.g., 2008-08). The hyphen is
required:
^([0-9]{4})-(1[0-2]|0[1-9])$| Regex options: None |
| Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby |
Named capture makes the regular expression and any code that may reference the capturing groups easier to read:
^(?<year>[0-9]{4})-(?<month>1[0-2]|0[1-9])$| Regex options: None |
| Regex flavors: .NET, Java 7, XRegExp, PCRE 7, Perl 5.10, Ruby 1.9 |
Python uses a different syntax for named capture, adding a
P. For brevity, we only show one
solution using the Python syntax. All the other solutions using
.NET-style named capture can be easily adapted to Python-style named
capture in the same way.
^(?P<year>[0-9]{4})-(?P<month>1[0-2]|0[1-9])$| Regex options: None |
| Regex flavors: PCRE, Python |
ISO 8601 allows hyphens to be omitted from calendar dates, making both 2010-08-20 and 20100820 valid representations of the same date. The following ...