我实际上正在执行此操作,但是它非常丑陋,并且让我彻夜难眠,试图拿出一段雄辩的代码来完成它。
我需要采用一系列代表IP范围的字符串,并确定该字符串代表多少实际IP地址。我的方法是将其拆分为4个八位位组,然后尝试拆分每个八位位组,然后从那里进行数学运算。
例如:1.2.3.4-6代表1.2.3.4、1.2.3.5和1.2.3.6,因此我想从该范围获得3的答案。
为了使它更复杂,我开始使用的字符串可以是文本框中的此类范围的列表,以换行符分隔,因此我需要单独查看每一行,获取表示的IP地址的数量,最后,如何许多提交的范围都有这种情况。
1.1.1.4-6 /* Represents 3 actual IP Addresses, need to know "3" */
2.2.3-10.255 /* Represents 8 actual IP Addresses, need to know "8" */
3.3.3.3 /* No ranges specified, skip this
4.4.4.4 /* No ranges specified, skip this
最终结果是我想知道2行包含一个“范围”,代表8个IP地址(3 + 8)
我的睡眠时间表将使您能解决任何雄辩的解决方案。 :
)
最佳答案
var ips = ["1.2.3.4", "2.3.4-6.7", "1.2.3.4-12"];
for(var i=0; i<ips.length; i++) {
var num = 1;
var ip = ips[i];
var parts = ip.split('.');
for(var j=0; j<parts.length; j++) {
var part = parts[j];
if(/-/.test(part)) {
var range = part.split('-');
num *= parseInt(range[1]) - parseInt(range[0]) + 1;
}
}
alert(ip + " has " + num + " ips.");
}
此代码还可以正确处理类似
1.2.3-4.0-255
的范围(即该范围内的256 * 2 = 512 ips)。没有范围的列表项总共产生1 ips,如果不需要,可以根据生成的num
忽略它们。您可能需要稍微修改我的示例,但是我相信您不会有任何麻烦。