I have an application which must warn the user upon use of localhost
, 127.0.0.1
, ::1
, or any loopback address (the target host is used for a database-to-database connection not necessarily inside of the environment of the application). This is made complicated because addresses like the following...
127.1
127.0.01
127.0000.0000.1
127.0.0.254
127.63.31.15
127.255.255.254
0::1
0000::0001
0000:0:0000::01
0000:0000:0000:0000:0000:0000:0000:0001
...will parse properly by the consuming code, and will resolve to loopback.
What is a regular expression which will match any permutation of the IPv4 and IPv6 loopback addresses?
After a short time fiddling around in RegexBuddy (which is a truly magnificent tool for test-driven RegEx construction), I have come up with this:
^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$
The string "localhost"
localhost
LOCALHOST
These permutations of the IPv4 loopback address
127.0.0.1
127.0.0.001
127.0.00.1
127.00.0.1
127.000.000.001
127.0000.0000.1
127.0.01
127.1
127.001
127.0.0.254
127.63.31.15
127.255.255.254
These permutations of the IPv6 loopback address
0:0:0:0:0:0:0:1
0000:0000:0000:0000:0000:0000:0000:0001
::1
0::1
0:0:0::1
0000::0001
0000:0:0000::0001
0000:0:0000::1
0::0:1
A valid server name
servername
subdomain.domain.tld
These valid IPv4 addresses
192.168.0.1
10.1.1.123
These valid IPv6 addresses
0001::1
dead:beef::1
::dead:beef:1