自己写的一个校验IP、IP掩码、IP段的方法

<input type="" name="" id="testip" onkeypress="getKey();" style=" 150px;height: 30px;">
<ul id="iplist"></ul>
<span id="ipnum">以输入的IP总数为0</span>

  自己写的一个校验IP、IP掩码、IP段的方法


JS

    var ipNum=0;
    function getKey(){  
        if(event.keyCode==13){  
            var ip= $('#testip').val();
            if(testIp(ip,1)){
                $('#testip').val("")
                 }
            }
            if(ipNum>4278124287){
                alert("超出IP总数");
                $('#testip').val(ip)
                return;
            }
        $('#ipnum').text(`以输入的IP总数为${ipNum}`)
        $('#iplist').val(ipNum)
    }
    $('#iplist').on('click','.ipdelete',function(e){
        ipNum=$('#iplist').val()-e.target.parentNode.value;
        e.target.parentNode.remove();
        $('#ipnum').text(`以输入的IP总数为${ipNum}`)
        $('#iplist').val(ipNum)
        e.preventDefault();
    }) 
    //type 为1的话会生成list  只想使用IP校验功能直接传IP 
    function testIp(ip,type){
        var ip_patrn =/^(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d)$/;    
        var ip_mask = /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))/(([0-9])|([1-2][0-9])|([3][0-2]))$/;
        if(!type){
            type==0;
        }
        if(ip!=""){
            if(ip.indexOf("-")!=-1){
                var ipOrigan=ip;
                ip=ip.split("-");
                if(ip_patrn.test(ip[0])&&ip_patrn.test(ip[1])){  //先验证是否是IP  在验证是否是正确的IP段  再计算IP数量
                        var start = ip[0].split('.');  
                        var end = ip[1].split('.');
                        var start_ip=start[0] * 256 * 256 * 256 + start[1] * 256 * 256 + start[2] * 256 + start[3]*1;
                        var end_ip=end[0] * 256 * 256 * 256 + end[1] * 256 * 256 + end[2] * 256 + end[3]*1;
                        if((end_ip - start_ip)>0){
                            ipNum=end_ip - start_ip+1+ipNum;
                            if(type==1&&ipNum<=4278124287){
                            $("#iplist").append(`<li value=${end_ip - start_ip+1}>${ipOrigan}<button class="ipdelete">删除</button></li>`)}
                            return true;        
                        }else{
                            alert('前后IP大小输入有误');
                            return false;
                        }
                }else{
                    alert('请检查IP段格式');
                    return false;
                }
            }else if(ip.indexOf("/")!=-1){   //验证是否是正确的IP掩码  在计算数量
                if(ip_mask.test(ip)){
                    var p=32-ip.slice(ip.indexOf("/")+1)
                    var pnum=1;
                    while(p){
                        pnum=2*pnum;
                        p--;
                    }
                    ipNum=ipNum+pnum;
                    if(type==1&&ipNum<=4278124287){
                    $("#iplist").append(`<li value=${pnum}>${ip}<button class="ipdelete">删除</button></li>`)}
                    return true;
                }else{
                    alert('请检查IP掩码格式')
                    return false;
                }
            }else{
                if(!ip_patrn.test(ip)){  //验证是否是IP
                    alert("请检查IP格式");
                    return false;
                }
                ipNum++
                if(type==1&&ipNum<=4278124287){
                $("#iplist").append(`<li value=1>${ip}<button class="ipdelete">删除</button></li>`)}
                return true;
            }

        }else{
            alert("请输入");
            return false;
        }    
    }
原文地址:https://www.cnblogs.com/wwx875075608/p/9138068.html