regexip-addressprivate

Private IP Address Identifier in Regular Expression


I'm wondering if this is the best way to match a string that starts with a private IP address (Perl-style Regex):

(^127\.0\.0\.1)|(^192\.168)|(^10\.)|(^172\.1[6-9])|(^172\.2[0-9])|(^172\.3[0-1])

Thanks much!


Solution

  • I'm assuming you want to match these ranges:

    127.  0.0.0 – 127.255.255.255     127.0.0.0 /8
     10.  0.0.0 –  10.255.255.255      10.0.0.0 /8
    172. 16.0.0 – 172. 31.255.255    172.16.0.0 /12
    192.168.0.0 – 192.168.255.255   192.168.0.0 /16
    

    You are missing some dots that would cause it to accept for example 172.169.0.0 even though this should not be accepted. I've fixed it below. Remove the new lines, it's just for readability.

    (^127\.)|
    (^10\.)|
    (^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|
    (^192\.168\.)
    

    Also note that this assumes that the IP addresses have already been validated - it accepts things like 10.foobar.