Validate IP4 addressValidate IP address in JavaTweets per secondTypeahead Talent BuddyISBN missing number solverCount the accumulated rainfall in a 2D mountain rangePython IBAN validationWAKE UP! CodingBat alarm clockValidating an IP address and returning the reason it's invalidHackerrank Gemstones SolutionCounting lower vs non-lowercase tokens for tokenized text with several conditions

Customer Requests (Sometimes) Drive Me Bonkers!

Increase performance creating Mandelbrot set in python

How to write papers efficiently when English isn't my first language?

Did Dumbledore lie to Harry about how long he had James Potter's invisibility cloak when he was examining it? If so, why?

India just shot down a satellite from the ground. At what altitude range is the resulting debris field?

How did Doctor Strange see the winning outcome in Avengers: Infinity War?

Hostile work environment after whistle-blowing on coworker and our boss. What do I do?

What is the best translation for "slot" in the context of multiplayer video games?

How to safely derail a train during transit?

Applicability of Single Responsibility Principle

Italian words for tools

What does "I’d sit this one out, Cap," imply or mean in the context?

Why Were Madagascar and New Zealand Discovered So Late?

Sort a list by elements of another list

Is `x >> pure y` equivalent to `liftM (const y) x`

What's the purpose of "true" in bash "if sudo true; then"

Is there any reason not to eat food that's been dropped on the surface of the moon?

How can I get through very long and very dry, but also very useful technical documents when learning a new tool?

How many times can American Tourist re-enter UK in same 6 month period?

How can we prove that any integral in the set of non-elementary integrals cannot be expressed in the form of elementary functions?

Does "every" first-order theory have a finitely axiomatizable conservative extension?

How does Loki do this?

Are student evaluations of teaching assistants read by others in the faculty?

How does the UK government determine the size of a mandate?



Validate IP4 address


Validate IP address in JavaTweets per secondTypeahead Talent BuddyISBN missing number solverCount the accumulated rainfall in a 2D mountain rangePython IBAN validationWAKE UP! CodingBat alarm clockValidating an IP address and returning the reason it's invalidHackerrank Gemstones SolutionCounting lower vs non-lowercase tokens for tokenized text with several conditions













7












$begingroup$


Validate IP Address



I got this problem during an interview. And would like to get some code review. I also wrote several tests with the expected output, and they all passed as expected.




Validate an IP address (IPv4). An address is valid if and only if it
is in the form "X.X.X.X", where each X is a number from 0 to 255.



For example, "12.34.5.6", "0.23.25.0", and "255.255.255.255" are valid
IP addresses, while "12.34.56.oops", "1.2.3.4.5", and
"123.235.153.425" are invalid IP addresses.




Examples:

"""

ip = '192.168.0.1'
output: true

ip = '0.0.0.0'
output: true

ip = '123.24.59.99'
output: true

ip = '192.168.123.456'
output: false
"""

def validateIP(ip):
#split them by '.' , and store them in an array
#check the array if the length is 4 length
arr = ip.split('.')
if len(arr) != 4:
return False
#0 check for special edge cases when non-digit
#1. check if they are digit,
#2. check if check the integer is between 0 and 255

for part in arr:
if len(part) > 1:
if part[0] == '0':
return False
if not part.isdigit():
return False
digit = int(part)
if digit < 0 or digit > 255:
return False
return True

#case#0

ip0="08.0.0.0" # False
test0= validateIP(ip0)
print(test0)

#case#1
ip1 = "192.168.0.1"
test1 = validateIP(ip1)
print(test1)

#case#2
ip2 = '0.0.0.0'
test2 = validateIP(ip2)
print(test2)

#case#3
ip3 = '123.24.59.99'
test3 = validateIP(ip3)
print(test3)

#case#4
ip4 = '192.168.123.456'
test4 = validateIP(ip4)
print(test4)

#case5
ip5 = "255.255.255.255"
test5 = validateIP(ip5)
print(test5)









share|improve this question











$endgroup$
















    7












    $begingroup$


    Validate IP Address



    I got this problem during an interview. And would like to get some code review. I also wrote several tests with the expected output, and they all passed as expected.




    Validate an IP address (IPv4). An address is valid if and only if it
    is in the form "X.X.X.X", where each X is a number from 0 to 255.



    For example, "12.34.5.6", "0.23.25.0", and "255.255.255.255" are valid
    IP addresses, while "12.34.56.oops", "1.2.3.4.5", and
    "123.235.153.425" are invalid IP addresses.




    Examples:

    """

    ip = '192.168.0.1'
    output: true

    ip = '0.0.0.0'
    output: true

    ip = '123.24.59.99'
    output: true

    ip = '192.168.123.456'
    output: false
    """

    def validateIP(ip):
    #split them by '.' , and store them in an array
    #check the array if the length is 4 length
    arr = ip.split('.')
    if len(arr) != 4:
    return False
    #0 check for special edge cases when non-digit
    #1. check if they are digit,
    #2. check if check the integer is between 0 and 255

    for part in arr:
    if len(part) > 1:
    if part[0] == '0':
    return False
    if not part.isdigit():
    return False
    digit = int(part)
    if digit < 0 or digit > 255:
    return False
    return True

    #case#0

    ip0="08.0.0.0" # False
    test0= validateIP(ip0)
    print(test0)

    #case#1
    ip1 = "192.168.0.1"
    test1 = validateIP(ip1)
    print(test1)

    #case#2
    ip2 = '0.0.0.0'
    test2 = validateIP(ip2)
    print(test2)

    #case#3
    ip3 = '123.24.59.99'
    test3 = validateIP(ip3)
    print(test3)

    #case#4
    ip4 = '192.168.123.456'
    test4 = validateIP(ip4)
    print(test4)

    #case5
    ip5 = "255.255.255.255"
    test5 = validateIP(ip5)
    print(test5)









    share|improve this question











    $endgroup$














      7












      7








      7


      2



      $begingroup$


      Validate IP Address



      I got this problem during an interview. And would like to get some code review. I also wrote several tests with the expected output, and they all passed as expected.




      Validate an IP address (IPv4). An address is valid if and only if it
      is in the form "X.X.X.X", where each X is a number from 0 to 255.



      For example, "12.34.5.6", "0.23.25.0", and "255.255.255.255" are valid
      IP addresses, while "12.34.56.oops", "1.2.3.4.5", and
      "123.235.153.425" are invalid IP addresses.




      Examples:

      """

      ip = '192.168.0.1'
      output: true

      ip = '0.0.0.0'
      output: true

      ip = '123.24.59.99'
      output: true

      ip = '192.168.123.456'
      output: false
      """

      def validateIP(ip):
      #split them by '.' , and store them in an array
      #check the array if the length is 4 length
      arr = ip.split('.')
      if len(arr) != 4:
      return False
      #0 check for special edge cases when non-digit
      #1. check if they are digit,
      #2. check if check the integer is between 0 and 255

      for part in arr:
      if len(part) > 1:
      if part[0] == '0':
      return False
      if not part.isdigit():
      return False
      digit = int(part)
      if digit < 0 or digit > 255:
      return False
      return True

      #case#0

      ip0="08.0.0.0" # False
      test0= validateIP(ip0)
      print(test0)

      #case#1
      ip1 = "192.168.0.1"
      test1 = validateIP(ip1)
      print(test1)

      #case#2
      ip2 = '0.0.0.0'
      test2 = validateIP(ip2)
      print(test2)

      #case#3
      ip3 = '123.24.59.99'
      test3 = validateIP(ip3)
      print(test3)

      #case#4
      ip4 = '192.168.123.456'
      test4 = validateIP(ip4)
      print(test4)

      #case5
      ip5 = "255.255.255.255"
      test5 = validateIP(ip5)
      print(test5)









      share|improve this question











      $endgroup$




      Validate IP Address



      I got this problem during an interview. And would like to get some code review. I also wrote several tests with the expected output, and they all passed as expected.




      Validate an IP address (IPv4). An address is valid if and only if it
      is in the form "X.X.X.X", where each X is a number from 0 to 255.



      For example, "12.34.5.6", "0.23.25.0", and "255.255.255.255" are valid
      IP addresses, while "12.34.56.oops", "1.2.3.4.5", and
      "123.235.153.425" are invalid IP addresses.




      Examples:

      """

      ip = '192.168.0.1'
      output: true

      ip = '0.0.0.0'
      output: true

      ip = '123.24.59.99'
      output: true

      ip = '192.168.123.456'
      output: false
      """

      def validateIP(ip):
      #split them by '.' , and store them in an array
      #check the array if the length is 4 length
      arr = ip.split('.')
      if len(arr) != 4:
      return False
      #0 check for special edge cases when non-digit
      #1. check if they are digit,
      #2. check if check the integer is between 0 and 255

      for part in arr:
      if len(part) > 1:
      if part[0] == '0':
      return False
      if not part.isdigit():
      return False
      digit = int(part)
      if digit < 0 or digit > 255:
      return False
      return True

      #case#0

      ip0="08.0.0.0" # False
      test0= validateIP(ip0)
      print(test0)

      #case#1
      ip1 = "192.168.0.1"
      test1 = validateIP(ip1)
      print(test1)

      #case#2
      ip2 = '0.0.0.0'
      test2 = validateIP(ip2)
      print(test2)

      #case#3
      ip3 = '123.24.59.99'
      test3 = validateIP(ip3)
      print(test3)

      #case#4
      ip4 = '192.168.123.456'
      test4 = validateIP(ip4)
      print(test4)

      #case5
      ip5 = "255.255.255.255"
      test5 = validateIP(ip5)
      print(test5)






      python interview-questions validation ip-address






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 9 hours ago









      200_success

      130k17155419




      130k17155419










      asked 16 hours ago









      NinjaGNinjaG

      893633




      893633




















          2 Answers
          2






          active

          oldest

          votes


















          9












          $begingroup$


          def validateIP(ip):



          I would expect a name starting is (a useful hint that it returns a Boolean rather than some more complex validation data structure) and explicitly mentioning IP v4 (since the current name is misleading). E.g. is_valid_IPv4_address.





           #split them by '.' , and store them in an array
          #check the array if the length is 4 length
          arr = ip.split('.')
          if len(arr) != 4:
          return False



          The comments don't tell me anything which the code doesn't already. In general, good comments explain why, not what.





           #0 check for special edge cases when non-digit
          #1. check if they are digit,
          #2. check if check the integer is between 0 and 255

          for part in arr:
          .. various conditions which return False
          return True



          IMO it would be more Pythonic to use all: I would boil the whole function down to



           parts = ip.split('.')
          return len(parts) == 4 and all(is_valid_IPv4_address_part(part) for part in parts)




           if len(part) > 1:
          if part[0] == '0':
          return False



          This isn't in the spec. It's a reasonable constraint, but you should check with the person who gave you the spec before writing the code, or at least put in a comment saying that you're making an assumption about the true intentions of the specifier.





           if not part.isdigit():
          return False



          This is buggy. (Before testing I thought there was an issue which should be bounced back to the specifier. Upon testing, I found that some of my test cases caused validateIP to throw an exception).



          What is the expected output for these test cases?



          ¹.¹.¹.¹
          ١.١.١.١
          𝟣.𝟣.𝟣.𝟣
          ①.①.①.①





          share|improve this answer









          $endgroup$




















            7












            $begingroup$


            1. A doc string reads nicer then # blockcomments



              Consider making a doc string of that function, so you can do help(validate_ip) and it will print the doc string in the interpreter.




            2. Adhere to PEP8



              Functions and variables should be snake_case ie def validate_ip(ip):



            3. You could use the all keyword to check if each part is correct; this will return False for the first failure.



            4. Make actual tests that ensure validity



              Instead of printing tests, make actual tests either with assert or the modules doctest or unittest.




            5. There is a module that does this for you



              Python is often described as "batteries included", and here you could use the ipaddress module, which will validate an IP when you create the IPv4Adress object.



            Reworked code



            import doctest

            def validate_ip(ip):
            """
            Checks if the ip address is valid
            args:
            ip (str): The IP address
            ret:
            A boolean: True for a a valid IP

            >>> validate_ip('08.0.0.0')
            False

            >>> validate_ip('192.169.0.1')
            True

            >>> validate_ip('0.0.0.0')
            True

            >>> validate_ip('192.168.123.456')
            False

            >>> validate_ip('oooh.0.0.1')
            False
            """
            ranges = ip.split('.')
            return len(ranges) == 4
            and all(
            r.isdigit() and # Check for digits
            int(r) in range(0, 256) and # Check in range of 0-255
            (r[0] != "0" or len(r) == 1) # Check for leading zero's
            for r in ranges
            )

            if __name__ == '__main__':
            doctest.testmod()


            ipaddress module



            from ipaddress import IPv4Address

            def is_valid_ip(ip):
            try:
            IPv4Address(ip)
            return True
            except ValueError:
            return False





            share|improve this answer











            $endgroup$












            • $begingroup$
              As a bonus, docstrings are picked up by Python's built-in help mechanisms.
              $endgroup$
              – Alex
              13 hours ago










            • $begingroup$
              @Alex I did mention help
              $endgroup$
              – Ludisposed
              13 hours ago










            • $begingroup$
              Sorry, must have skipped over this.
              $endgroup$
              – Alex
              13 hours ago










            Your Answer





            StackExchange.ifUsing("editor", function ()
            return StackExchange.using("mathjaxEditing", function ()
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            );
            );
            , "mathjax-editing");

            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "196"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216311%2fvalidate-ip4-address%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            9












            $begingroup$


            def validateIP(ip):



            I would expect a name starting is (a useful hint that it returns a Boolean rather than some more complex validation data structure) and explicitly mentioning IP v4 (since the current name is misleading). E.g. is_valid_IPv4_address.





             #split them by '.' , and store them in an array
            #check the array if the length is 4 length
            arr = ip.split('.')
            if len(arr) != 4:
            return False



            The comments don't tell me anything which the code doesn't already. In general, good comments explain why, not what.





             #0 check for special edge cases when non-digit
            #1. check if they are digit,
            #2. check if check the integer is between 0 and 255

            for part in arr:
            .. various conditions which return False
            return True



            IMO it would be more Pythonic to use all: I would boil the whole function down to



             parts = ip.split('.')
            return len(parts) == 4 and all(is_valid_IPv4_address_part(part) for part in parts)




             if len(part) > 1:
            if part[0] == '0':
            return False



            This isn't in the spec. It's a reasonable constraint, but you should check with the person who gave you the spec before writing the code, or at least put in a comment saying that you're making an assumption about the true intentions of the specifier.





             if not part.isdigit():
            return False



            This is buggy. (Before testing I thought there was an issue which should be bounced back to the specifier. Upon testing, I found that some of my test cases caused validateIP to throw an exception).



            What is the expected output for these test cases?



            ¹.¹.¹.¹
            ١.١.١.١
            𝟣.𝟣.𝟣.𝟣
            ①.①.①.①





            share|improve this answer









            $endgroup$

















              9












              $begingroup$


              def validateIP(ip):



              I would expect a name starting is (a useful hint that it returns a Boolean rather than some more complex validation data structure) and explicitly mentioning IP v4 (since the current name is misleading). E.g. is_valid_IPv4_address.





               #split them by '.' , and store them in an array
              #check the array if the length is 4 length
              arr = ip.split('.')
              if len(arr) != 4:
              return False



              The comments don't tell me anything which the code doesn't already. In general, good comments explain why, not what.





               #0 check for special edge cases when non-digit
              #1. check if they are digit,
              #2. check if check the integer is between 0 and 255

              for part in arr:
              .. various conditions which return False
              return True



              IMO it would be more Pythonic to use all: I would boil the whole function down to



               parts = ip.split('.')
              return len(parts) == 4 and all(is_valid_IPv4_address_part(part) for part in parts)




               if len(part) > 1:
              if part[0] == '0':
              return False



              This isn't in the spec. It's a reasonable constraint, but you should check with the person who gave you the spec before writing the code, or at least put in a comment saying that you're making an assumption about the true intentions of the specifier.





               if not part.isdigit():
              return False



              This is buggy. (Before testing I thought there was an issue which should be bounced back to the specifier. Upon testing, I found that some of my test cases caused validateIP to throw an exception).



              What is the expected output for these test cases?



              ¹.¹.¹.¹
              ١.١.١.١
              𝟣.𝟣.𝟣.𝟣
              ①.①.①.①





              share|improve this answer









              $endgroup$















                9












                9








                9





                $begingroup$


                def validateIP(ip):



                I would expect a name starting is (a useful hint that it returns a Boolean rather than some more complex validation data structure) and explicitly mentioning IP v4 (since the current name is misleading). E.g. is_valid_IPv4_address.





                 #split them by '.' , and store them in an array
                #check the array if the length is 4 length
                arr = ip.split('.')
                if len(arr) != 4:
                return False



                The comments don't tell me anything which the code doesn't already. In general, good comments explain why, not what.





                 #0 check for special edge cases when non-digit
                #1. check if they are digit,
                #2. check if check the integer is between 0 and 255

                for part in arr:
                .. various conditions which return False
                return True



                IMO it would be more Pythonic to use all: I would boil the whole function down to



                 parts = ip.split('.')
                return len(parts) == 4 and all(is_valid_IPv4_address_part(part) for part in parts)




                 if len(part) > 1:
                if part[0] == '0':
                return False



                This isn't in the spec. It's a reasonable constraint, but you should check with the person who gave you the spec before writing the code, or at least put in a comment saying that you're making an assumption about the true intentions of the specifier.





                 if not part.isdigit():
                return False



                This is buggy. (Before testing I thought there was an issue which should be bounced back to the specifier. Upon testing, I found that some of my test cases caused validateIP to throw an exception).



                What is the expected output for these test cases?



                ¹.¹.¹.¹
                ١.١.١.١
                𝟣.𝟣.𝟣.𝟣
                ①.①.①.①





                share|improve this answer









                $endgroup$




                def validateIP(ip):



                I would expect a name starting is (a useful hint that it returns a Boolean rather than some more complex validation data structure) and explicitly mentioning IP v4 (since the current name is misleading). E.g. is_valid_IPv4_address.





                 #split them by '.' , and store them in an array
                #check the array if the length is 4 length
                arr = ip.split('.')
                if len(arr) != 4:
                return False



                The comments don't tell me anything which the code doesn't already. In general, good comments explain why, not what.





                 #0 check for special edge cases when non-digit
                #1. check if they are digit,
                #2. check if check the integer is between 0 and 255

                for part in arr:
                .. various conditions which return False
                return True



                IMO it would be more Pythonic to use all: I would boil the whole function down to



                 parts = ip.split('.')
                return len(parts) == 4 and all(is_valid_IPv4_address_part(part) for part in parts)




                 if len(part) > 1:
                if part[0] == '0':
                return False



                This isn't in the spec. It's a reasonable constraint, but you should check with the person who gave you the spec before writing the code, or at least put in a comment saying that you're making an assumption about the true intentions of the specifier.





                 if not part.isdigit():
                return False



                This is buggy. (Before testing I thought there was an issue which should be bounced back to the specifier. Upon testing, I found that some of my test cases caused validateIP to throw an exception).



                What is the expected output for these test cases?



                ¹.¹.¹.¹
                ١.١.١.١
                𝟣.𝟣.𝟣.𝟣
                ①.①.①.①






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 12 hours ago









                Peter TaylorPeter Taylor

                18.2k2963




                18.2k2963























                    7












                    $begingroup$


                    1. A doc string reads nicer then # blockcomments



                      Consider making a doc string of that function, so you can do help(validate_ip) and it will print the doc string in the interpreter.




                    2. Adhere to PEP8



                      Functions and variables should be snake_case ie def validate_ip(ip):



                    3. You could use the all keyword to check if each part is correct; this will return False for the first failure.



                    4. Make actual tests that ensure validity



                      Instead of printing tests, make actual tests either with assert or the modules doctest or unittest.




                    5. There is a module that does this for you



                      Python is often described as "batteries included", and here you could use the ipaddress module, which will validate an IP when you create the IPv4Adress object.



                    Reworked code



                    import doctest

                    def validate_ip(ip):
                    """
                    Checks if the ip address is valid
                    args:
                    ip (str): The IP address
                    ret:
                    A boolean: True for a a valid IP

                    >>> validate_ip('08.0.0.0')
                    False

                    >>> validate_ip('192.169.0.1')
                    True

                    >>> validate_ip('0.0.0.0')
                    True

                    >>> validate_ip('192.168.123.456')
                    False

                    >>> validate_ip('oooh.0.0.1')
                    False
                    """
                    ranges = ip.split('.')
                    return len(ranges) == 4
                    and all(
                    r.isdigit() and # Check for digits
                    int(r) in range(0, 256) and # Check in range of 0-255
                    (r[0] != "0" or len(r) == 1) # Check for leading zero's
                    for r in ranges
                    )

                    if __name__ == '__main__':
                    doctest.testmod()


                    ipaddress module



                    from ipaddress import IPv4Address

                    def is_valid_ip(ip):
                    try:
                    IPv4Address(ip)
                    return True
                    except ValueError:
                    return False





                    share|improve this answer











                    $endgroup$












                    • $begingroup$
                      As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                      $endgroup$
                      – Alex
                      13 hours ago










                    • $begingroup$
                      @Alex I did mention help
                      $endgroup$
                      – Ludisposed
                      13 hours ago










                    • $begingroup$
                      Sorry, must have skipped over this.
                      $endgroup$
                      – Alex
                      13 hours ago















                    7












                    $begingroup$


                    1. A doc string reads nicer then # blockcomments



                      Consider making a doc string of that function, so you can do help(validate_ip) and it will print the doc string in the interpreter.




                    2. Adhere to PEP8



                      Functions and variables should be snake_case ie def validate_ip(ip):



                    3. You could use the all keyword to check if each part is correct; this will return False for the first failure.



                    4. Make actual tests that ensure validity



                      Instead of printing tests, make actual tests either with assert or the modules doctest or unittest.




                    5. There is a module that does this for you



                      Python is often described as "batteries included", and here you could use the ipaddress module, which will validate an IP when you create the IPv4Adress object.



                    Reworked code



                    import doctest

                    def validate_ip(ip):
                    """
                    Checks if the ip address is valid
                    args:
                    ip (str): The IP address
                    ret:
                    A boolean: True for a a valid IP

                    >>> validate_ip('08.0.0.0')
                    False

                    >>> validate_ip('192.169.0.1')
                    True

                    >>> validate_ip('0.0.0.0')
                    True

                    >>> validate_ip('192.168.123.456')
                    False

                    >>> validate_ip('oooh.0.0.1')
                    False
                    """
                    ranges = ip.split('.')
                    return len(ranges) == 4
                    and all(
                    r.isdigit() and # Check for digits
                    int(r) in range(0, 256) and # Check in range of 0-255
                    (r[0] != "0" or len(r) == 1) # Check for leading zero's
                    for r in ranges
                    )

                    if __name__ == '__main__':
                    doctest.testmod()


                    ipaddress module



                    from ipaddress import IPv4Address

                    def is_valid_ip(ip):
                    try:
                    IPv4Address(ip)
                    return True
                    except ValueError:
                    return False





                    share|improve this answer











                    $endgroup$












                    • $begingroup$
                      As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                      $endgroup$
                      – Alex
                      13 hours ago










                    • $begingroup$
                      @Alex I did mention help
                      $endgroup$
                      – Ludisposed
                      13 hours ago










                    • $begingroup$
                      Sorry, must have skipped over this.
                      $endgroup$
                      – Alex
                      13 hours ago













                    7












                    7








                    7





                    $begingroup$


                    1. A doc string reads nicer then # blockcomments



                      Consider making a doc string of that function, so you can do help(validate_ip) and it will print the doc string in the interpreter.




                    2. Adhere to PEP8



                      Functions and variables should be snake_case ie def validate_ip(ip):



                    3. You could use the all keyword to check if each part is correct; this will return False for the first failure.



                    4. Make actual tests that ensure validity



                      Instead of printing tests, make actual tests either with assert or the modules doctest or unittest.




                    5. There is a module that does this for you



                      Python is often described as "batteries included", and here you could use the ipaddress module, which will validate an IP when you create the IPv4Adress object.



                    Reworked code



                    import doctest

                    def validate_ip(ip):
                    """
                    Checks if the ip address is valid
                    args:
                    ip (str): The IP address
                    ret:
                    A boolean: True for a a valid IP

                    >>> validate_ip('08.0.0.0')
                    False

                    >>> validate_ip('192.169.0.1')
                    True

                    >>> validate_ip('0.0.0.0')
                    True

                    >>> validate_ip('192.168.123.456')
                    False

                    >>> validate_ip('oooh.0.0.1')
                    False
                    """
                    ranges = ip.split('.')
                    return len(ranges) == 4
                    and all(
                    r.isdigit() and # Check for digits
                    int(r) in range(0, 256) and # Check in range of 0-255
                    (r[0] != "0" or len(r) == 1) # Check for leading zero's
                    for r in ranges
                    )

                    if __name__ == '__main__':
                    doctest.testmod()


                    ipaddress module



                    from ipaddress import IPv4Address

                    def is_valid_ip(ip):
                    try:
                    IPv4Address(ip)
                    return True
                    except ValueError:
                    return False





                    share|improve this answer











                    $endgroup$




                    1. A doc string reads nicer then # blockcomments



                      Consider making a doc string of that function, so you can do help(validate_ip) and it will print the doc string in the interpreter.




                    2. Adhere to PEP8



                      Functions and variables should be snake_case ie def validate_ip(ip):



                    3. You could use the all keyword to check if each part is correct; this will return False for the first failure.



                    4. Make actual tests that ensure validity



                      Instead of printing tests, make actual tests either with assert or the modules doctest or unittest.




                    5. There is a module that does this for you



                      Python is often described as "batteries included", and here you could use the ipaddress module, which will validate an IP when you create the IPv4Adress object.



                    Reworked code



                    import doctest

                    def validate_ip(ip):
                    """
                    Checks if the ip address is valid
                    args:
                    ip (str): The IP address
                    ret:
                    A boolean: True for a a valid IP

                    >>> validate_ip('08.0.0.0')
                    False

                    >>> validate_ip('192.169.0.1')
                    True

                    >>> validate_ip('0.0.0.0')
                    True

                    >>> validate_ip('192.168.123.456')
                    False

                    >>> validate_ip('oooh.0.0.1')
                    False
                    """
                    ranges = ip.split('.')
                    return len(ranges) == 4
                    and all(
                    r.isdigit() and # Check for digits
                    int(r) in range(0, 256) and # Check in range of 0-255
                    (r[0] != "0" or len(r) == 1) # Check for leading zero's
                    for r in ranges
                    )

                    if __name__ == '__main__':
                    doctest.testmod()


                    ipaddress module



                    from ipaddress import IPv4Address

                    def is_valid_ip(ip):
                    try:
                    IPv4Address(ip)
                    return True
                    except ValueError:
                    return False






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 13 hours ago









                    Toby Speight

                    26.7k742118




                    26.7k742118










                    answered 13 hours ago









                    LudisposedLudisposed

                    9,06822267




                    9,06822267











                    • $begingroup$
                      As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                      $endgroup$
                      – Alex
                      13 hours ago










                    • $begingroup$
                      @Alex I did mention help
                      $endgroup$
                      – Ludisposed
                      13 hours ago










                    • $begingroup$
                      Sorry, must have skipped over this.
                      $endgroup$
                      – Alex
                      13 hours ago
















                    • $begingroup$
                      As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                      $endgroup$
                      – Alex
                      13 hours ago










                    • $begingroup$
                      @Alex I did mention help
                      $endgroup$
                      – Ludisposed
                      13 hours ago










                    • $begingroup$
                      Sorry, must have skipped over this.
                      $endgroup$
                      – Alex
                      13 hours ago















                    $begingroup$
                    As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                    $endgroup$
                    – Alex
                    13 hours ago




                    $begingroup$
                    As a bonus, docstrings are picked up by Python's built-in help mechanisms.
                    $endgroup$
                    – Alex
                    13 hours ago












                    $begingroup$
                    @Alex I did mention help
                    $endgroup$
                    – Ludisposed
                    13 hours ago




                    $begingroup$
                    @Alex I did mention help
                    $endgroup$
                    – Ludisposed
                    13 hours ago












                    $begingroup$
                    Sorry, must have skipped over this.
                    $endgroup$
                    – Alex
                    13 hours ago




                    $begingroup$
                    Sorry, must have skipped over this.
                    $endgroup$
                    – Alex
                    13 hours ago

















                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    Use MathJax to format equations. MathJax reference.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216311%2fvalidate-ip4-address%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Log på Navigationsmenu

                    Wonderful Copenhagen (sang) Eksterne henvisninger | NavigationsmenurSide på frankloesser.comWonderful Copenhagen

                    Detroit Tigers Spis treści Historia | Skład zespołu | Sukcesy | Członkowie Baseball Hall of Fame | Zastrzeżone numery | Przypisy | Menu nawigacyjneEncyclopedia of Detroit - Detroit TigersTigers Stadium, Detroit, MITigers Timeline 1900sDetroit Tigers Team History & EncyclopediaTigers Timeline 1910s1935 World Series1945 World Series1945 World Series1984 World SeriesComerica Park, Detroit, MI2006 World Series2012 World SeriesDetroit Tigers 40-Man RosterDetroit Tigers Coaching StaffTigers Hall of FamersTigers Retired Numberse