【问题标题】:Regex for ip address/rangeip地址/范围的正则表达式
【发布时间】:2012-12-23 00:07:16
【问题描述】:

我有一个文本框,它应该接受的唯一输入是单个 IP 地址或以下形式的范围:10.2.3.4-10

到目前为止我有这个:

string txt = "10.13.11.12-100";

        string re1 = "((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(?![\\d])";   // IPv4 IP Address 1
        string re2 = ".*?"; // Non-greedy match on filler
        string re3 = @"\b([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b";//"([0-255])";   // Integer Number 1

        Regex r = new Regex(re1 + re2 + re3, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        Regex r2 = new Regex(re1, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        Match m = r.Match(txt);
        Match m3 = r2.Match(txt);
        if (m.Success || m3.Success)
        {...}

唯一的问题是,如果我有 100.100.11.11-256,它仍然会返回 true,因为它与上面的 m3.Success 匹配为 true。

如何解决?

【问题讨论】:

标签: c# regex winforms ip


【解决方案1】:

对于 IP 范围正则表达式:

^10.2.3.(?:[4-9]|10)$

对于单个 IP 地址:Regular expression to match DNS hostname or IP Address?

【讨论】:

  • 我认为 OP 想要那种 格式,而不是特定的 IP 范围。
  • 这只是一个示例,它应该采用任何 IP 地址,并且不只是从 10.2.3.4 到 10.2.3.4.10 的任何范围。这是针对一种 IP 地址格式 \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 但不确定如何将范围添加到其中(不管它是否是有效地址)
  • 这个答案与用户的范围不对应。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2020-10-14
  • 2011-06-20
相关资源
最近更新 更多