For the strict, full datetime, including milliseconds, per the W3C's take on the spec.:
//-- Complete precision:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+([+-][0-2]d:[0-5]d|Z)/
//-- No milliseconds:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d([+-][0-2]d:[0-5]d|Z)/
//-- No Seconds:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d([+-][0-2]d:[0-5]d|Z)/
//-- Putting it all together:
/(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+([+-][0-2]d:[0-5]d|Z))|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d([+-][0-2]d:[0-5]d|Z))|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d([+-][0-2]d:[0-5]d|Z))/
.
Additional variations allowed by the actual ISO 8601:2004(E) doc:
/********************************************
** No time-zone varients:
*/
//-- Complete precision:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+/
//-- No milliseconds:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d/
//-- No Seconds:
/d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d/
//-- Putting it all together:
/(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d)/
WARNING: This all gets messy fast, and it still allows certain nonsense such as a 14th month.
Additionally, ISO 8601:2004(E) allows a several other variants.
.
"2010-06-15T00:00:00" isn't legal, because it doesn't have the time-zone designation.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…