Python判定IP地址合法性的三種方法

pythontab發表於2018-03-05

IP合法性校驗是開發中非常常用的,看起來很簡單的判斷,作用確很大,寫起來比較容易出錯,今天我們來總結一下,看一下3種常用的IP地址合法性校驗的方法。 

IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)


方法1: 正規表示式判定法

最簡單的實現方法是構造一個正規表示式。判斷使用者的輸入與正規表示式是否匹配。若匹配則是正確的IP地址,否則不是正確的IP地址。


下面給出相對應的驗證ip的正規表示式:

^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$


\d表示0~9的任何一個數字

{2}表示正好出現兩次

[0-4]表示0~4的任何一個數字

| 的意思是或者

1\d{2}的意思就是100~199之間的任意一個數字

2[0-4]\d的意思是200~249之間的任意一個數字

25[0-5]的意思是250~255之間的任意一個數字

[1-9]\d的意思是10~99之間的任意一個數字

[1-9])的意思是1~9之間的任意一個數字

\.的意思是.點要轉義(特殊字元類似,@都要加\\轉義)

程式碼如下:

import re
def check_ip(ipAddr):
    compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
    if compile_ip.match(ipAddr):
        return True    
    else:    
        return False


方法2: 字串拆解法

把ip地址當作字串,以.為分隔符分割,進行判斷

程式碼:

#!/usr/bin/python 
import os,sys 
def check_ip(ipAddr): 
        import sys 
        addr=ipAddr.strip().split('.')  #切割IP地址為一個列表 
        #print addr 
        if len(addr) != 4:  #切割後列表必須有4個引數 
                print "check ip address failed!"
                sys.exit() 
        for i in range(4): 
                try: 
                        addr[i]=int(addr[i])  #每個引數必須為數字,否則校驗失敗 
                except: 
                        print "check ip address failed!"
                        sys.exit() 
                if addr[i]<=255 and addr[i]>=0:    #每個引數值必須在0-255之間 
                        pass
                else: 
                        print "check ip address failed!"
                        sys.exit() 
                i+=1
        else: 
                print "check ip address success!"
if  len(sys.argv)!=2:  #傳參加本身長度必須為2 
        print "Example: %s 10.0.0.1 "%sys.argv[0] 
        sys.exit() 
else: 
        check_ip(sys.argv[1])  #滿足條件呼叫校驗IP函式


方法3: 引入IPy類庫

IPy庫是一個處理IP比較強大的第三方庫

IPy庫的安裝請自行查詢。

import IPy  
  
def  is_ip(address):  
    try:  
        IPy.IP(address)  
        return True  
    except Exception as  e:  
        return False


總結

三種方法都能夠準確的判斷出ip(IP V4)地址的合法性, 正規表示式程式碼量少, 邏輯簡單, 但是正規表示式繁瑣, 字串判定法容易理解,但是程式碼量大, 使用類庫,判斷簡潔,但是需要引入額外的庫。各有利弊, 使用時自行選擇即可。


相關文章