python IP validation REGex validation for full and

2019-03-02 00:28发布

Im trying to validate the input to see if it a valid IP address(could be a partial one).

Acceptable input : 172, 172.112, 172.112.113, 172.112.113.114

Unacceptable input: 1724,172.11113 etc etc

Heres a function that I created to check it (however it validates unacceptable input like 1724 which I cant seem to fix..please help)

def ipcheck(ip):
    ippattern_str = '(([1-2]?[\d]{1,2}\.?){0,1}(\.[1-2]?[\d]{1,2}){0,1}(\.[1-2]?[\d]{1,2}\.){0,1}(([1-2]?[\d]{1,2}[\D\W]*)'
    ippattern = re.compile(ippattern_str)
    # ippattern is now used to call match, passing only the ip string
    global matchip
    matchip = ippattern.match(ip)
    return matchip


ip = sys.argv[1]
ipcheck(ip)

print matchip

I feel like maybe I need to use anchors properly? Ive tried everything to my best knowledge, any help would be appreciated.

标签: python regex ip
2条回答
劫难
2楼-- · 2019-03-02 00:55

Maybe you could avoid to use regex and let python socket.inet_aton do the job :

import socket

try:
    socket.inet_aton(addr)
    # correct IP
except socket.error:
    # bad IP

For inet_aton, a valid IP address is something of the form :

       a.b.c.d
       a.b.c
       a.b
       a

In all of the above forms, components of the dotted address can be specified in decimal, octal (with a leading 0), or hexadecimal, with a leading 0X). Addresses in any of these forms are collectively termed IPV4 numbers-and-dots notation. The form that uses exactly four decimal numbers is referred to as IPv4 dotted-decimal notation (or sometimes: IPv4 dotted-quad notation).

source

查看更多
时光不老,我们不散
3楼-- · 2019-03-02 00:58

This regex would do the trick:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){0,3}$

It ensures that the given numbers are in the correct range (0-255) and can have 1-4 parts.

You can see it in action here: http://regexr.com?2va3j

查看更多
登录 后发表回答