【问题标题】:Regular Expression to match IP address + wildcard匹配 IP 地址 + 通配符的正则表达式
【发布时间】:2011-03-01 06:25:46
【问题描述】:

我正在尝试使用正则表达式验证器来匹配 IP 过滤系统的 IP 地址(可能带有通配符)。

我正在使用以下正则表达式:

"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}"

在带有 Regex.Matches 的 LINQPad 中运行时效果很好,但在我使用验证器时似乎不起作用。

有人对更好的正则表达式有什么建议,或者为什么它可以在测试中工作但不能在现场工作?

干杯,埃德

【问题讨论】:

  • 你能提供一些无法正确匹配的测试用例吗?
  • @VeeArr 我还没有让它正确验证,所以任何任意字符串,包括 IP 地址:D

标签: c# asp.net regex validation


【解决方案1】:

这个:\\.|\\*\\. 看起来有点狡猾。改为这样做:

@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$"

并且只接受 0-255(谢谢,apoorv020):

^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$

【讨论】:

  • 另一个好建议,但恐怕也行不通!
  • 确实如此 - 在 gskinner.com/RegExr 尝试一下。确保字符串前面有一个@。如果它仍然不起作用,请向我们展示您用来匹配它的代码。请注意,我正在尝试将其与 192.168.*.* and 10.*.*.*` 之类的内容相匹配 - 这是您想要的吗?你能给我们展示一些测试用例吗?
  • 我认为您没有完全正确地阅读我的问题:我的原始正则表达式将匹配带有通配符的 IPv4 地址,不用担心,但它在 asp:RegularExpressionValidator 中不起作用。您的正则表达式有完全相同的问题。
  • 您是否尝试过原始的正则表达式,但替换了转义的反斜杠 \` with a regular one `(不使用 C# @ 转义字符)? (即尝试^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)
  • @VeeArr 我们赢了。永远忘记您不必在正则表达式验证器中逃脱!干杯,你应该把它作为一个单独的答案,这样我就可以接受了。
【解决方案2】:

asp:RegularExpressionValidator 不需要双转义反斜杠。你应该试试:

([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

【讨论】:

    【解决方案3】:

    [0-9]{1,3} 将允许 999.999.999.999 形式的 IP 地址。您的 IP 地址范围应该只允许 0-255。
    将所有出现的 [0-9]{1,3} 替换为 ([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5]) 这在我看来确实很复杂,并且可能有更好的方法来做到这一点,但乍一看似乎是正确的。

    【讨论】:

    • 我对实际 IP 地址是否有效并不大惊小怪,只是格式(以后更容易解析),但重点是。
    【解决方案4】:

    如何将开始和结束字符串字符放在表达式上

    ^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$
    

    【讨论】:

    • 不错的建议,但恐怕仍然无法验证!
    【解决方案5】:

    我的回答是针对 .NET,而不是 RegularExpressionValidator-specific。

    用于 IP 匹配的正则表达式字符串(使用 ExplicitCapture 以避免无用的捕获并保持 RE 简洁):

    "\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b"
    

    根据特定的用例,您可能需要添加适当的锚点,即在开头添加 \A^,在末尾添加 \Z$。然后您可以删除字边界要求:\b

    (请记住在字符串中将\ 加倍)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2011-08-17
      • 2011-08-27
      • 2012-05-17
      • 1970-01-01
      • 2014-05-17
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多