【发布时间】:2011-03-06 15:23:34
【问题描述】:
我需要一个验证 IP 地址的正则表达式模式。这很容易谷歌搜索,但我有一个小问题。我需要最后一个数字才能接受一个范围。因此,以下输入将有效。
XXX.XXX.XXX.X-Y
类似 168.68.2.1-34
我找到了普通 IP 地址的模式,但没有找到处理范围的模式。
【问题讨论】:
标签: regex ip-address
我需要一个验证 IP 地址的正则表达式模式。这很容易谷歌搜索,但我有一个小问题。我需要最后一个数字才能接受一个范围。因此,以下输入将有效。
XXX.XXX.XXX.X-Y
类似 168.68.2.1-34
我找到了普通 IP 地址的模式,但没有找到处理范围的模式。
【问题讨论】:
标签: regex ip-address
要接受 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 中通过合理的努力完成。
【讨论】:
那么,那就是:
(normal-ip-regex)-[0-9]+
如果您需要比这更复杂的东西,那么我会说您最好的办法是实际解析出数字并以这种方式验证它们(例如,如果您想实际确保“X”小于“ Y" 那么就没有办法用正则表达式来做到这一点)。
【讨论】:
(normal-ip-regex) 以$ 结尾,则修改后的正则表达式将不匹配任何内容。
123.123.123.123-99999 可能无效,但会与您的正则表达式匹配。
验证 IP 地址的“更好”方法是将它们转换为整数。请记住,点符号只是为了让人们更容易阅读。
我不知道您使用的是什么语言,但大多数都会有类似inet_aton 的函数将点表示法转换为整数(这将隐式检查格式是否正确)。
一旦您将地址作为整数,您可以检查它是否在您的有效范围内,就像检查任何其他整数一样(,最有可能)。
【讨论】: