天天看點

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

正規表達式判定法

最簡單的實作方法是構造一個正規表達式。判斷使用者的輸入與正規表達式是否比對。若比對則是正确的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           

字元串拆解法

把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函數           

引入IPy類庫

IPy庫是一個處理IP比較強大的第三方庫。涉及到計算大量的IP位址,包括網段、網絡掩碼、廣播位址、子網數、IP類型等别擔心,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)位址的合法性, 正規表達式代碼量少, 邏輯簡單, 但是正規表達式繁瑣, 字元串判定法容易了解,但是代碼量大, 使用類庫,判斷簡潔,但是需要引入額外的庫。各有利弊, 使用時自行選擇即可。

原文釋出時間為:2018-09-20

本文作者:

程式員共成長

本文來自雲栖社群合作夥伴“

”,了解相關資訊可以關注“

”。