1

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.

2 Answers 2

7

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

Sign up to request clarification or add additional context in comments.

3 Comments

I need use regular expressions and secondly I dont think that sicket.inet_aton can validate partial IPs?
@A.R.B : as explained in the linked doc, inet_aton will validate partial IP. His job is to convert a valid IP into the network notation :) . For the need of regex, well, never mind ;)
ooh okay thank you so much!! i automatically assumed it wouldnt, this will be very helpful in the future :)
3

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

1 Comment

very nice website! and great reg x,as I suspected I was not using the anchors properly..thank you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.