【发布时间】: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。
如何解决?
【问题讨论】:
-
这可能会帮助您处理正则表达式部分:stackoverflow.com/questions/106179/…。它可能需要针对您的特定语言稍作调整。
-
你应该可以使用这里的答案stackoverflow.com/questions/106179/…