验证smtpHost:端口字符串

时间:2012-11-16 11:34:32

标签: c# regex

我无法编写正则表达式来验证并对下面的内容进行分组:

  • c1dev01 - >有效
  • c1dev01:25 - >有效
  • 192.168.2.3 - >有效
  • 192.168.2.3:189 - >有效
  • c1dev01: - >有效
  • c1dev01:aa - >无效

2 个答案:

答案 0 :(得分:0)

我认为正确范围的验证最好不要在正则表达式中完成,而是在单独的步骤中完成。但是,正则表达式非常适合验证字符串格式并一次性提取端口号。对于格式,我们最多只需要一个冒号,只需要右边的数字(最多5个)。这对应于以下模式字符串:

@"^([^:]+)(?:[:](\d{0,5}))?$"

其中^和$将模式锚定到字符串的开头和结尾。如果在Regex.Match()中使用此模式,则可以在match.Groups [1] .Value中找到主机名,并在match.Groups [2] .Value中找到端口号,以检查它是否不超过65535。

当然,您可以进一步限制主机允许的字符。

答案 1 :(得分:0)

^(?(\ d {1,3} \ d {1,3} \ d {1,3} \ d {1,3})|(\ W +)。)(?:(\ d {0,5}))* $

要使主机/ IP使用match.Group["host"]并使端口使用match.Group["posrt"]