- Save Regexctrl+s
- Update Regexctrl+⇧+s

- PCRE2 (PHP >=7.3)
- PCRE (PHP <7.3)
- ECMAScript (JavaScript)
- Python
- Golang
- Java 8

- Match
- Substitution
- List
- Unit Tests

Sponsor

Jamstack at Scale

/

# Leap Years are any year that can be evenly divided by 4
# (such as 2012, 2016, etc)
# • except if it can be evenly divided by 100
# then it isn't (such as 2100, 2200, etc)
# • except if it can be evenly divided by 400,
# then it is (such as 2000, 2400)
# https://www.mathsisfun.com/leap-years.html
# -------------------------------------------------
# verify date dd/mm/yyyy; possible separators: -.,/
# valid year range: 0000-9999
^ # start anchor
# precheck xx-xx-xxxx,... add new separators here
(?=\d{2}([-.,\/])\d{2}\1\d{4}$)
(?: # day-check: non caturing group
# days 01-28
0[1-9]|1\d|[2][0-8]|
# february 29d check for leap year: all 4y / 00 years: only each 400
# 0400,0800,1200,1600,2000,...
29
(?!.02. # not if feb: if not ...
(?!
# 00 years: exclude !0 %400 years
(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)
# 00,04,08,12,...
\d{2}(?:[02468][048]|[13579][26])
)
)|
# d30 negative lookahead: february cannot have 30 days
30(?!.02)|
# d31 positive lookahead: month up to 31 days
31(?=.(?:0[13578]|10|12))
) # eof day-check
# month 01-12
.(?:0[1-9]|1[012])
# year 0000-9999
.\d{4}
$ # end anchor

/

gmx

Comment: Leap Years are any year that can be evenly divided by 4

# (such as 2012, 2016, etc)

(such as 2012, 2016, etc)Comment: (such as 2012, 2016, etc)

# • except if it can be evenly divided by 100

• except if it can be evenly divided by 100Comment: • except if it can be evenly divided by 100

# then it isn't (such as 2100, 2200, etc)

then it isn't (such as 2100, 2200, etc)Comment: then it isn't (such as 2100, 2200, etc)

# • except if it can be evenly divided by 400,

• except if it can be evenly divided by 400,Comment: • except if it can be evenly divided by 400,

# then it is (such as 2000, 2400)

then it is (such as 2000, 2400)Comment: then it is (such as 2000, 2400)

# https://www.mathsisfun.com/leap-years.html

https://www.mathsisfun.com/leap-years.htmlComment: https://www.mathsisfun.com/leap-years.html

# -------------------------------------------------

-------------------------------------------------Comment: -------------------------------------------------

# verify date dd/mm/yyyy; possible separators: -.,/

verify date dd/mm/yyyy; possible separators: -.,/Comment: verify date dd/mm/yyyy; possible separators: -.,/

# valid year range: 0000-9999

valid year range: 0000-9999Comment: valid year range: 0000-9999

^ asserts position at start of a line

# start anchor

start anchorComment: start anchor

# precheck xx-xx-xxxx,... add new separators here

precheck xx-xx-xxxx,... add new separators hereComment: precheck xx-xx-xxxx,... add new separators here

Positive Lookahead

(?=\d{2}([-.,\/])\d{2}\1\d{4}$)

Assert that the Regex below matches

Non-capturing group

(?: # day-check: non caturing group
# days 01-28
0[1-9]|1\d|[2][0-8]|
# february 29d check for leap year: all 4y / 00 years: only each 400
# 0400,0800,1200,1600,2000,...
29
(?!.02. # not if feb: if not ...
(?!
# 00 years: exclude !0 %400 years
(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)
# 00,04,08,12,...
\d{2}(?:[02468][048]|[13579][26])
)
)|
# d30 negative lookahead: february cannot have 30 days
30(?!.02)|
# d31 positive lookahead: month up to 31 days
31(?=.(?:0[13578]|10|12))
)

# eof day-check

eof day-check# month 01-12

month 01-12. matches any character (except for line terminators)

Non-capturing group

(?:0[1-9]|1[012])

# year 0000-9999

year 0000-9999. matches any character (except for line terminators)

\d

matches a digit (equivalent to [0-9])$ asserts position at the end of a line

Comment: end anchor

Global pattern flags

g modifier: **g**lobal. All matches (don't return after first match)

m modifier: **m**ulti line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

x modifier: e**x**tended. Spaces and text after a # in the pattern are ignored

Your regular expression does not match the subject string.Try launching the debugger to find out why.

/

/

gmx

Please wait while the app is loading...