正则表达式可以验证一个值是否具有以下特征之一:
123-29-123-123.subdomain.zomg.com:8085
123.12.34.56:420
很遗憾,我非常不擅长正则表达式、C#、谷歌搜索以及专有名词和普通名词之间的区别。
实际上,它可以是一个大致的近似值,我会使用任何以 : 冒号分隔符和端口为后缀的内容。
这个能行吗?
^(?<Host>[^:]+)(?::(?<Port>\d+))?$
主机 = 123-29-123-123.subdomain.zomg.com 端口 = 8085以及
主机 = 123.12.34.56:420 端口 = 420
?*&%#.?*&%#.?*&%#.?*&%#.?*&%#.:4
这样的内容,将 ?*&%#.?*&%#.?*&%#.?*&%#.?*&%#.
作为主机名。那是一个有效的主机名吗? - FrustratedWithFormsDesigner可以使用我所谓的匹配失效符号 (?! ) 来否定一个匹配(如果后缀不存在则匹配)。我写了一篇博客文章,题为:.Net 中的正则表达式(Regex)匹配失效符号 (?! )。
在 (?! 后缀) 中,如果匹配到后缀,则匹配失败。我已经考虑到了 256-999 和 000 的可能性,使用了 (?! )。这是模式,请使用 IgnorePatternWhiteSpace,因为我已经注释了模式:
string pattern = @"
^( # Anchor to the beginning of the line
# Invalidations
(?!25[6-9]) # If 256, 257...259 are found STOP
(?!2[6-9]\d) # If 260-299 stop
(?![3-9]\d\d) # if 300-999 stop
(?!000) # No zeros
(\d{1,3}) # Between 1-3 numbers
(?:[.-]?) # Match but don't capture a . or -
){4,6} # IPV4 IPV6
(?<Url>[A-Za-z.\d]*?) # Subdomain is mostly text
(?::)
(?<Port>\d+)";
HTH
最简单的正则表达式可能是:
(\d{1,3}\.\d{1,3}\.\d{1,3})(:\d+)?
但是... 这将允许像999.999.999
这样的东西,这不是一个有效(格式有效,但值无效)的IP地址。
如果您想验证每个块,最好在正则表达式之外进行验证。
[01]?\d{1,2}|2[01234]\d|25[012345]
代替\d{1,3}
,以匹配0到255之间的数字。 - Jens