详解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.2中Print函数用法实例详解
May 19 Python
详细介绍Python的鸭子类型
Sep 12 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
python executemany的使用及注意事项
Mar 13 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python求离散序列导数的示例
Jul 10 Python
python实现简易淘宝购物
Nov 22 Python
python向图片里添加文字
Nov 26 Python
python实现处理mysql结果输出方式
Apr 09 Python
keras 如何保存最佳的训练模型
May 25 Python
pytest配置文件pytest.ini的详细使用
Apr 17 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
Python读写zip压缩文件的方法
2018/08/29 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
课堂教学改革实施方案
2014/03/17 职场文书
人力资源职位说明书
2014/07/29 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年环卫工作总结
2014/11/22 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
用Python将库打包发布到pypi
2021/04/13 Python
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android