验证字符串是否为有效的IP地址

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。 

这样把规则所有罗列出来以后,构造一个正则表达式的思路就清晰了。spa

  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])code

 

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])) ip

方法以下:字符串

/// <summary>
        /// 验证一个字符串是否为IPV4
        /// </summary>
        /// <param name="ip">要验证的字符串</param>
        /// <returns>返回结果,是IPV4返回true,不是IPV4返回false</returns>
        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))string

因此方法以下:

        /// <summary>
        /// 验证一个字符串是否为IPV4
        /// </summary>
        /// <param name="ip">要验证的字符串</param>
        /// <returns>返回结果,是IPV4返回true,不是IPV4返回false</returns>
        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;
            }
        }

扩展it

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

        /// <summary>
        /// 验证字符串是否可转换成有效的端口号
        /// </summary>
        /// <param name="port">字符串</param>
        /// <returns>返回结果,能转换返回true,不能转换返回false</returns>
        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;
            }
        }
相关文章
相关标签/搜索