【问题标题】:Regex for IP validation with range?使用范围进行 IP 验证的正则表达式?
【发布时间】:2011-03-06 15:23:34
【问题描述】:

我需要一个验证 IP 地址的正则表达式模式。这很容易谷歌搜索,但我有一个小问题。我需要最后一个数字才能接受一个范围。因此,以下输入将有效。

XXX.XXX.XXX.X-Y

类似 168.68.2.1-34

我找到了普通 IP 地址的模式,但没有找到处理范围的模式。

【问题讨论】:

    标签: regex ip-address


    【解决方案1】:

    要接受 0 到 255 之间的数字,我会使用 (25[0-5]|2[0-4]\d|[0-1]?\d{1,2})。调用上面的表达式 A,IP 范围的正则表达式看起来像

    A\.A\.A\.A-A
    

    或

    (A\.){3}A-A
    

    如果范围是可选的,请使用(-A)? 而不是-A。

    这不会检查范围的开始是否小于结束,但这不能在 Regex 中通过合理的努力完成。

    【讨论】:

      【解决方案2】:

      那么,那就是:

      (normal-ip-regex)-[0-9]+
      

      如果您需要比这更复杂的东西,那么我会说您最好的办法是实际解析出数字并以这种方式验证它们(例如,如果您想实际确保“X”小于“ Y" 那么就没有办法用正则表达式来做到这一点)。

      【讨论】:

      • 这里有一点(但很重要?)注意 - 如果(normal-ip-regex) 以$ 结尾,则修改后的正则表达式将不匹配任何内容。
      • 范围不是有界的吗?例如,123.123.123.123-99999 可能无效,但会与您的正则表达式匹配。
      【解决方案3】:

      验证 IP 地址的“更好”方法是将它们转换为整数。请记住,点符号只是为了让人们更容易阅读。

      我不知道您使用的是什么语言,但大多数都会有类似inet_aton 的函数将点表示法转换为整数(这将隐式检查格式是否正确)。

      一旦您将地址作为整数,您可以检查它是否在您的有效范围内,就像检查任何其他整数一样(,最有可能)。

      【讨论】:

      • Err.. 看起来我误读了这个问题,你实际上想取一个范围,而不是检查一个范围。这可能没有那么有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2011-04-30
      • 2014-12-25
      相关资源
      最近更新 更多