IPV4地址由4個組數字組成,每組數字之間以.分隔,每組數字的取值範圍是0-255。IPV4必須知足如下四條規則:正則表達式
這樣把規則所有羅列出來以後,構造一個正則表達式的思路就清晰了。spa
把它們組合起來,就獲得一個匹配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; } }