详解Python判定IP地址合法性的三种方法


Posted in Python onMarch 06, 2018

IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法性校验的方法。

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

方法1: 正则表达式判定法

最简单的实现方法是构造一个正则表达式。判断用户的输入与正则表达式是否匹配。若匹配则是正确的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的正则表达式:

\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)地址的合法性, 正则表达式代码量少, 逻辑简单, 但是正则表达式繁琐, 字符串判定法容易理解,但是代码量大, 使用类库,判断简洁,但是需要引入额外的库。各有利弊, 使用时自行选择即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
Python中的__slots__示例详解
Jul 06 Python
Python中字典和集合学习小结
Jul 07 Python
Python reduce()函数的用法小结
Nov 15 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
基于Python 的语音重采样函数解析
Jul 06 Python
python实现图像外边界跟踪操作
Jul 13 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 Python
python使用BeautifulSoup 解析HTML
Apr 24 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 #Python
python距离测量的方法
Mar 06 #Python
Python入门之后再看点什么好?
Mar 05 #Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 #Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 #Python
python入门教程 python入门神图一张
Mar 05 #Python
详解TensorFlow在windows上安装与简单示例
Mar 05 #Python
You might like
超级简单的发送邮件程序
2006/10/09 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP的引用详解
2015/02/22 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
Opacity.js
2007/01/22 Javascript
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
python实现线程池的方法
2015/06/30 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
医药工作者的求职信范文
2013/09/21 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
事假请假条范文
2014/04/11 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
vue判断按钮是否可以点击
2022/04/09 Vue.js