详解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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
详解Python进程间通信之命名管道
Aug 28 Python
python编写弹球游戏的实现代码
Mar 12 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
numpy基础教程之np.linalg
Feb 12 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
Django中URL的参数传递的实现
Aug 04 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
Python3常见函数range()用法详解
Dec 30 Python
python批量修改xml属性的实现方式
Mar 05 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
python regex库实例用法总结
2021/01/03 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
竞选演讲稿范文
2013/12/28 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL