我需要在一个软件中的字段上进行一些数据验证,该软件仅支持通过正则表达式进行验证。我一直在寻找正在寻找的正则表达式,但似乎所有的响应只是提供了一个更好的方法来做到这一点。我必须这样做,所以我希望有人可以帮助我。
基本上,正则表达式应该接受任何有效的IPv4地址,不包括以下内容:
从10.0.0.0到10.255.255.255
从172.16.0.0到172.31.255.255
从192.168.0.0到192.168.255.255
我发现了同样的问题here,但实际上没有人能够回答它。
我一直在使用this网站来尝试验证正则表达式。我从
开始\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b
我也在网站上找到了。这适用于IPv4地址,但我现在不确定如何排除私有地址。有没有人有这方面的正则表达式?
感谢。
答案 0 :(得分:2)
您可以在前面添加negative lookahead检查它们((?!(10|172\.(1[6-9]|2[0-9]|3[0-2])|192\.168))
),为您提供:
\b(?!(10|172\.(1[6-9]|2[0-9]|3[0-2])|192\.168))(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b
假设您所指的软件支持外观,当然。
答案 1 :(得分:0)
以防万一,
如果您正在尝试 IP,CIDR 验证(例如:10.123.33.12/32
)。试试下面的:
validateCIDRAddress(data: string) {
let isValid = false;
const regexp = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/;
if (data && regexp.test(data)) {
isValid = true;
}
return isValid;
}
答案 2 :(得分:-2)
正则表达式不是指定IPv4地址范围的最佳方法。随着您添加越来越多的范围,您的正则表达式将变得越来越复杂且容易出错。
相反,您应该考虑使用CIDR表示法。
以下是您的示例范围的CIDR表示法:
From 10.0.0.0 to 10.255.255.255 -> 10.0.0.0/8
From 172.16.0.0 to 172.31.255.255 -> 172.16.0.0/12
From 192.168.0.0 to 192.168.255.255 -> 192.168.0.0/16
您的编程语言可能有一个库,可以让您轻松确定给定的输入IPv4地址是否对给定的CIDR地址列表有效。
编辑:
我没注意到OP显然使用的某种软件无法使用regexp以外的任何技术来验证IP地址是否在范围内。所以,如果确实如此,那么显然我使用CIDR表示法的替代方案对于这种特殊情况不起作用。但是,我坚持认为使用CIDR表示法编码IP地址范围通常是比使用正则表达式更好的选择,当CIDR表示法是一个选项时。