详解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 相关文章推荐
python查找目录下指定扩展名的文件实例
Apr 01 Python
Python 登录网站详解及实例
Apr 11 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
详解Python高阶函数
Aug 15 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
python 元组和列表的区别
Dec 30 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
用python找出那些被“标记”的照片
2017/04/20 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Why we need EJB
2016/10/20 面试题
酒店保安领班职务说明书
2014/03/04 职场文书
优秀求职信
2014/05/29 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技