Regular Expressions 101

Community Patterns

Four-Digit Leap Years post-Y0 (AD/BCE) (Museum of Bad Data)

1

Regular Expression
ECMAScript (JavaScript)

/
^(\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)$
/
gm

Description

This will match all four-digit years that are leap years, using the "either (multiple of four but not a multiple of 100) OR (multiple of 400)" rule.

Explained

/
^(
  \d\d[2468][048]|\d\d[13579][26]|\d\d0[48]| # multiple of four but not 100
     [02468][048]00  |[13579][26]00          # multiple of four hundred
)$
/gmx

References

Test Cases

//	accept: multiple of four ()
0004
0008
0012
0016
0020
0024
0028
0032
0036
0040
0044
0048
0052
0056
0060
0064
0068
0072
0076
0080
0084
0088
0092
0096
1560
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
9996
//	accept: Multiple of 400
0000
0400
0800
1200
1600
2000
2400
2800
3200
3600
4000
4400
4800
5200
5600
6000
6400
6800
7200
7600
8000
8400
8800
9200
9600
//	REJECT: Not a multiple of four
0101
0102
0103
1537
1538
2001
2002
2003
2021
2022
2023
2025
2026
2027
2029
2030
2031
2033
2034
2035
2037
2038
2039
2041
2042
2043
9997
9998
9999
//	REJECT: Multiple of 100 but not 400
0100
0200
0300
0500
0600
0700
0900
1000
1100
1500
2100
2200
2300
2500
2600
2700
2900
3000
3100
3300
3400
3500
3700
//	REJECT: Negative dates not accepted (malformed)
-2000
-0400
-0100
-0004
//	REJECT: Out of range date per RFC 3339
10000
Submitted by Philip Flip Kromer - 10 months ago