詳解Python判定IP地址合法性的三種方法,python判定ip合法性

來源:互聯網
上載者:User

詳解Python判定IP地址合法性的三種方法,python判定ip合法性

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

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

方法1: Regex判定法

最簡單的實現方法是構造一個Regex。判斷使用者的輸入與Regex是否匹配。若匹配則是正確的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)$

下面給出相對應的驗證ip的Regex:

\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 redef 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)地址的合法性, Regex代碼量少, 邏輯簡單, 但是Regex繁瑣, 字串判定法容易理解,但是代碼量大, 使用類庫,判斷簡潔,但是需要引入額外的庫。各有利弊, 使用時自行選擇即可。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.