如何使用javascript比较ipv6格式的起始ip和结束ip的大小?

1、node环境?
2、非node环境?
因为实际工作是jquery+bootstrap的,所以最好是纯js实现
3、请考虑::情况、 0234 省略为234等情况

阅读 3.5k
2 个回答

IPV6是四位16进制的数字组成的,实际上还是数字的.

parseInt("AAAA",16)
43690

首先对IP进行分割.
比如:

let ip = "ABC1:1234::CCCC"
let splited=ip.split(":")
// 得到["ABC1", "1234", "", "CCCC"]

根据不同情况,元素可能是2到8个,如果小于8,就要在""的位置上添加8-N个0,

let ip = "ABC1:1234::CCCC"
let splited = ip.split(":")
if (splited.length < 8) {
    //将""替换成对应数量的"0000"
    let index = splited.indexOf("")
    let temp = splited.slice(index + 1, splited.length)
    let zero = []
    for (let i = 0; i < (8 - splited.length + 1); i++) {
        //8-去掉""之后的长度,得到需要补齐的元素数量
        zero.push("0000")
    }


    splited = splited.slice(0, index).concat(zero).concat(temp)//空间复杂度比较大了,

}
console.log(splited)
//[ 'ABC1', '1234', '0000', '0000', '0000', '0000', '0000', 'CCCC' ]

现在得到了一个数组,我不知道你怎么定的大小,如果想对比某一个值,取出来对比就好,对比整体的,那就连接起来成为两个字符串,直接比就好了.

接楼上所说,其实不用转码,我们依然可以使用比较符号去进行比较。字符串比较,会按照ASCII进行比较。

const ipv6 = 'CDCD:910A:2222:5498:8475:1111:3900:2020'
let blocks = ipv6.toUpperCase().split(':')
console.log(a[0] > a[7])

不需要区分js运行环境

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题