博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证字符串是否为有效的IP地址
阅读量:4880 次
发布时间:2019-06-11

本文共 2431 字,大约阅读时间需要 8 分钟。

IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的取值范围是0-255。IPV4必须满足以下四条规则:

  1. 任何一个1位或2位数字,即0-99;
  2. 任何一个以1开头的3位数字,即100-199;
  3. 任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249;
  4. 任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255。 

这样把规则全部罗列出来之后,构造一个正则表达式的思路就清晰了。

  1. 首先满足第一条规则的正则是:\d{1,2}
  2. 首先满足第二条规则的正则是:1\d{2}
  3. 首先满足第三条规则的正则是:2[0-4]\d
  4. 首先满足第四条规则的正则是:25[0-5] 

把它们组合起来,就得到一个匹配0-255数字的正则表达式了: (\d{1,2})|(1\d{2})|(2[0-4]\d)|( 25[0-5])

 

IPV4由四组这样的数字组成,中间由.隔开,或者说由三组数字和字符.和一组数字组成,所以匹配IPV4的正则表达式如下: (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])) 

方法如下:

///         /// 验证一个字符串是否为IPV4        ///         /// 要验证的字符串        /// 
返回结果,是IPV4返回true,不是IPV4返回false
private bool IsCorrectIP(string ip) { string pattrn = @"(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))"; if (System.Text.RegularExpressions.Regex.IsMatch(ip, pattrn)) { return true; } else { return false; } }

这个正则有一个缺陷,就是如果不使用边界匹配的话,像字符串 255.255.0.256也会被匹配到,匹配到的结果是255.255.0.25。可以添加限制条件,前后要么是边界,要么是非数字,并且使用前后查找(lookaround)。即: (?<=(\\b|\\D))(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))(?=(\\b|\\D))

所以方法如下:

///         /// 验证一个字符串是否为IPV4        ///         /// 要验证的字符串        /// 
返回结果,是IPV4返回true,不是IPV4返回false
private bool IsCorrectIP(string ip) { string pattrn = "(?<=(\\b|\\D))(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)" +"|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)" +"|(25[0-5]))(?=(\\b|\\D))"; if (System.Text.RegularExpressions.Regex.IsMatch(ip, pattrn)) { return true; } else { return false; } }

扩展

验证字符串能否转换成有效端口号:

///         /// 验证字符串是否可转换成有效的端口号        ///         /// 字符串        /// 
返回结果,能转换返回true,不能转换返回false
private bool IsCorrectPort(string port) { try { int p = int.Parse(port); if (p>65535||p<0) { return false; } else { return true; } } catch (Exception) { return false; } }

转载于:https://www.cnblogs.com/ice-/p/6165802.html

你可能感兴趣的文章
MySQL DATE_SUB() 函数
查看>>
在SSH框架下按条件分页查询
查看>>
jquery选择器
查看>>
【javascript学习——《javascript高级程序设计》笔记】DOM操作
查看>>
高效的SQL语句翻页代码
查看>>
NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
查看>>
linux下Makefile全解(二)
查看>>
XMLHTTP.readyState的五种状态
查看>>
百度外卖 前端面试题
查看>>
record for json formate site
查看>>
查询树形的根节点
查看>>
HDU 1272 小希的迷宫
查看>>
hdu 5412 CRB and Queries(整体二分)
查看>>
CentOS如何安装linux桌面?
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>
bzoj 2281: [Sdoi2011]黑白棋
查看>>
bzoj 4475: [Jsoi2015]子集选取
查看>>
团队开发7
查看>>
java之静态代理与动态代理
查看>>