驗證字符串是否爲有效的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;
            }
        }
相關文章
相關標籤/搜索