regex match date — YYYY-MM-DD and common formats
Quick Answer
# ISO 8601 — YYYY-MM-DD
/\b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])\b/
// JavaScript — extract all ISO dates from text
const text = 'From 2024-01-15 to 2024-12-31';
text.match(/\b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])\b/g)
// ['2024-01-15', '2024-12-31']
Usage
Extract or validate dates in log files, CSV exports, or form input.
Other causes & fixes
Common date format patterns
# YYYY-MM-DD
/\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])/
# MM/DD/YYYY or MM-DD-YYYY
/(?:0[1-9]|1[0-2])[\/-](?:0[1-9]|[12]\d|3[01])[\/-]\d{4}/
# D Month YYYY (e.g. "15 January 2024")
/\d{1,2} (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{4}/
Python — parse with datetime instead of regex
For actual date validation (e.g. Feb 30 does not exist), use the datetime library.
from datetime import datetime
def parse_date(s):
try:
return datetime.strptime(s, '%Y-%m-%d')
except ValueError:
return None
parse_date('2024-01-15') # datetime(2024, 1, 15)
parse_date('2024-02-30') # None — invalid date
Extract date components with named groups
import re
m = re.match(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', '2024-01-15')
m.group('year') # '2024'
Related