Unless using regexes is a requirement, I wouldn't use them at all for this purpose. I'd use "split" to separate the date string into its component parts and then validate each component separately.
That has the added benefit of being easier to understand when you take a look at this code again a month from now.