为了账号安全,请及时绑定邮箱和手机立即绑定

js怎么校验以逗号分隔的多ip地址

js怎么校验以逗号分隔的多ip地址

隔江千里 2018-12-28 19:14:19
在文本域中输入多个ip地址并已逗号分隔,怎么用js的正则表达式校验呢
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

 - 忘了 IP 段可以为 0,所以修改了下,现在范围是 0.0.0.0 ~ 255.255.255.255


先来验证一个 IP,每个 IP 分为 4 个段,每个段的规则如下


一位数,/[1-9]/

二位数,/[1-9]\d/

三位数,首位是 1,/1\d{2}/ 或者 /1\d\d/

三位数,首位是 2,第二位不是 5,/2[0-4]\d/

三位数,首位是 2,第二们是 5,/25[0-5]/

然后把这些规则用 | 组合起来,就是 IP 中的一段的验证规则


/[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]/


四段组合成的 IP 是由一个上述的一段加三个带点号验证的一段,所以是


示意:/one(?:\.one){3}/,写出来就是


/(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(?:\.([0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}/


逗号分隔的多个IP,那就是,每个前面是逗号(,)或起始标记(^),一共无数个……所以


/^(?:(?:^|,)(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:[0-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3})+$/


补充

说实在的,写正则确实痛苦,可以写个函数来解决,可能更容易懂也更不容易出错


function testIpList(ips) {

    // 把 ips 按逗号拆成 IP 数组,分别进行验证

    // every 表示每个 ip 验证通过才算通过

    return ips.split(",")

        .every(ip => {

            // 把每个 IP 拆成几段

            const segments = ip.split(".");

            // 如果是精确的 4 段而且每段转换成数字都在 1~255 就对了

            return segments.length === 4

                && segments

                    .map(segment => parseInt(segment, 10) || 0)

                    .every(n => n >= 0 && n <= 255);

        });

}


查看完整回答
反对 回复 2019-01-22
  • 1 回答
  • 0 关注
  • 1477 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号