正则表达式的IP地址
我尝试使用此代码validationIP地址,但它不起作用……
public static bool IP(string ipStr) { string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$"; Regex check = new Regex (pattern); bool valid = false; if (ipStr == "") { valid = false; } else { valid = check.IsMatch (ipStr, 0); } return valid; }
知道什么是错的吗?
我会改用IPAddress.TryParse
静态方法。
IPAddress ip; bool b = IPAddress.TryParse("1234.12.12.12",out ip);
匹配有效的IP地址使用
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$
代替
^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])){3}$
因为许多正则表达式引擎匹配OR序列中的第一种可能性
你可以试试你的正则表达式引擎:10.48.0.200
在这里测试差异
以前已经回答了有效IP地址的问题。
至于调试正则表达式,在Windows上我衷心推荐Expresso 。 在网络上,有一个免费的基于Flash的测试仪 。
我本身并不是一个正则表达式专家,但我使用的是Expresso(一种正则表达式工具),并且它有自己的正则表达式库,用于这样的预设场景。 试试这个。
string pattern = @"(?2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?2[0-4]\d|25[0-5]|[01]?\d\d?)";
对于ipv4和ipv6中的CIDR格式
这是检查所有可能的IPv4地址的完整正则表达式(点分十进制,点hex,点八进制,十进制,hex,八进制和混合模式)
^(0[0-7]{10,11}|0(x|X)[0-9a-fA-F]{8}|(\b4\d{8}[0-5]\b|\b[1-3]?\d{8}\d?\b)|((2[0-5][0-5]|1\d{2}|[1-9]\d?)|(0(x|X)[0-9a-fA-F]{2})|(0[0-7]{3}))(\.((2[0-5][0-5]|1\d{2}|\d\d?)|(0(x|X)[0-9a-fA-F]{2})|(0[0-7]{3}))){3})$
我用所有可能的地址测试了它。