詳解Python判定IP地址合法性的三種方法
IP合法性校驗是開發(fā)中非常常用的,看起來很簡單的判斷,作用確很大,寫起來比較容易出錯,今天我們來總結(jié)一下,看一下3種常用的IP地址合法性校驗的方法。
IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)
方法1: 正則表達式判定法
最簡單的實現(xiàn)方法是構(gòu)造一個正則表達式。判斷用戶的輸入與正則表達式是否匹配。若匹配則是正確的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)$
下面給出相對應(yīng)的驗證ip的正則表達式:
\d表示0~9的任何一個數(shù)字
{2}表示正好出現(xiàn)兩次
[0-4]表示0~4的任何一個數(shù)字
| 的意思是或者
1\d{2}的意思就是100~199之間的任意一個數(shù)字
2[0-4]\d的意思是200~249之間的任意一個數(shù)字
25[0-5]的意思是250~255之間的任意一個數(shù)字
[1-9]\d的意思是10~99之間的任意一個數(shù)字
[1-9])的意思是1~9之間的任意一個數(shù)字
\.的意思是.點要轉(zhuǎn)義(特殊字符類似,@都要加\\轉(zhuǎn)義)
代碼如下:
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('.') #切割I(lǐng)P地址為一個列表 #print addr if len(addr) != 4: #切割后列表必須有4個參數(shù) print "check ip address failed!" sys.exit() for i in range(4): try: addr[i]=int(addr[i]) #每個參數(shù)必須為數(shù)字,否則校驗失敗 except: print "check ip address failed!" sys.exit() if addr[i]<=255 and addr[i]>=0: #每個參數(shù)值必須在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]) #滿足條件調(diào)用校驗IP函數(shù)
方法3: 引入IPy類庫
IPy庫是一個處理IP比較強大的第三方庫
IPy庫的安裝請自行查找。
import IPy def is_ip(address): try: IPy.IP(address) return True except Exception as e: return False
總結(jié)
三種方法都能夠準確的判斷出ip(IP V4)地址的合法性, 正則表達式代碼量少, 邏輯簡單, 但是正則表達式繁瑣, 字符串判定法容易理解,但是代碼量大, 使用類庫,判斷簡潔,但是需要引入額外的庫。各有利弊, 使用時自行選擇即可。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python Pytorch gpu 分析環(huán)境配置
Pytorch是目前最火的深度學(xué)習框架之一,目前也支持了pytorch的GPU加速,所以我就想著,在這兩個電腦上裝個Pytorch,這篇文章主要介紹了Python Pytorch(gpu)分析環(huán)境配置,需要的朋友可以參考下2023-04-04探索Python fcntl模塊文件鎖和文件控制的強大工具使用實例
這篇文章主要介紹了Python fcntl模塊文件鎖和文件控制的強大工具使用實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01PyTorch中torch.tensor()和torch.to_tensor()的區(qū)別
在Pytorch中Tensor和tensor都用于生成新的張量,但二者并不相同,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.tensor()和torch.to_tensor()區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-01-01python使用numpy按一定格式讀取bin文件的實現(xiàn)
這篇文章主要介紹了python使用numpy按一定格式讀取bin文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05Python中應(yīng)該使用%還是format來格式化字符串
這篇文章主要介紹了Python中應(yīng)該使用%還是format來格式化字符串的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09