当前位置: 代码迷 >> JavaScript >> js验证ip地址跟子网掩码等
  详细解决方案

js验证ip地址跟子网掩码等

热度:575   发布时间:2013-12-02 12:00:40.0
js验证ip地址和子网掩码等
/**
* 函数名:   validateIP
* 函数功能: 验证IP的合法性
* 传入参数: what:点分十进制的IP(如:192.168.1.2) 
* 返回值:   true:what为合法IP false: what为非法IP
**/
function validateIP(what) 
{
	if(what.search(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) == -1)
		return false;
    	var fs = 0,ls = 0;
	var myArray = what.split(/\./);
	var i;
	for( i = 0; i < 4; i ++ ) 
	{
		if( !isNumeric(myArray[i]) )
			return false;

		var t=atoi(myArray[i]); /* 每个域值范围0-255 */
		if( (t<0) || (t>255) )
			return false;
	}	
	fs= atoi(myArray[0]);	//取第一位进行校验
	ls = atoi(myArray[3]);  //取最后一位进行校验
	
	/* 主机部分不能全是1和0(第一位不能为255和0),网络部分不能全是0(最后一位不能为0) */
	if((fs == 255) || (fs ==0) || (ls == 0))
	{
		return false;
	}
	return true;
}


/**
* 函数名:   validateMask
* 函数功能: 验证子网掩码的合法性
* 传入参数: MaskStr:点分十进制的子网掩码(如:255.255.255.192) 
* 调用函数: _checkIput_fomartIP(ip) 
* 返回值:   true:MaskStr为合法子网掩码 false: MaskStr为非法子网掩码
**/
function validateMask(MaskStr)
{
    /* 有效性校验 */
    var IPPattern = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
    if(!IPPattern.test(MaskStr))return false;

    /* 检查域值 */
    var IPArray = MaskStr.split(".");
    var ip1 = parseInt(IPArray[0]);
    var ip2 = parseInt(IPArray[1]);
    var ip3 = parseInt(IPArray[2]);
    var ip4 = parseInt(IPArray[3]);
    /* 每个域值范围0-255 */
    if ( ip1<0 || ip1>255 
       || ip2<0 || ip2>255
       || ip3<0 || ip3>255
       || ip4<0 || ip4>255 )
    {
       return false;
    }

    /* 检查二进制值是否合法 */
    //拼接二进制字符串
    var ip_binary = _checkIput_fomartIP(ip1) + _checkIput_fomartIP(ip2) + _checkIput_fomartIP(ip3) + _checkIput_fomartIP(ip4);

    if(-1 != ip_binary.indexOf("01"))
    {
        return false;
    }
    return true;
}

/**
* 函数名:   _checkIput_fomartIP
* 函数功能: 返回传入参数对应的8位二进制值
* 传入参数: ip:点分十进制的值(0~255),int类型的值,
* 主调函数: validateMask
* 返回值:    ip对应的二进制值(如:传入255,返回11111111;传入1,返回00000001)
**/
function _checkIput_fomartIP(ip)
{
    return (ip+256).toString(2).substring(1); //格式化输出(补零)
}

/**
* 函数名:    convertIP
* 函数功能: 传入参数string nnn.nnn.nnn.nnn 转化为long format IP
* 返回值:    转化后的IP
**/
function convertIP( what )
{
	if( !checkIP( what ) )
		return 0;

	var myArray = what.split(/\./);	
	var ip = (256*256*256)*(myArray[0]) + (256*256)*(myArray[1]) + 256*(myArray[2]) + 1*myArray[3];
	return ip;
}

/**
* 函数名:   checkIP
* 函数功能: 验证IP的合法性
* 传入参数: what:点分十进制的IP(如:192.168.1.2) 
* 返回值:   true:what为合法IP false: what为非法IP
**/
function checkIP(what) 
{
	if(what.search(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) == -1)
		return false;
        var fs = 0,ls = 0;
	var myArray = what.split(/\./);
	var i;
	for( i = 0; i < 4; i ++ ) 
	{
		if( !isNumeric(myArray[i]) )
			return false;

		var t=atoi(myArray[i]); /* 每个域值范围0-255 */
		if( (t<0) || (t>255) )
			return false;
	}
	return true;
}

/**
* 函数名:   splitString
* 函数功能: 分割字符串存入数值中
* 传入参数: str要分割的字符串,splitor分割标示符 
* 返回值:   Array
**/
function splitString( str, splitor )
{
	var a = new Array();
	var n = 0, c;
	
	a[n]="";
	for( var i=0; i < str.length; i ++ )
	{
		c = str.charAt(i);
		if( c != splitor )
		{
			a[n] +=c;
		}
		else
		{
			n ++;
			a[n]="";
		}
	}
	return a;
}

/**
* 函数名:   isNumeric
* 函数功能: 检测是否是数字
* 传入参数: 传入strval参数 
* 返回值:   true:strval为数字 false:strval为非数字
**/
function isNumeric(strval) {
	var  c;
	for (var i=0; i<strval.length;i++) {
		c =strval.charAt(i);
		if (c < "0" || c > "9") {
			return false;
		}
	}
	return true;
}


//检测是否大于0
function isMoreThanOne(strval) {
	var  c;
	for (var i=0; i<strval.length;i++) {
		c =strval.charAt(i);
		if (c < "1" || c > "9") {
			return false;
		}
	}
	return true;
}

function cvrtStr(src) {
	var c, i, s = "";
	for( i = 0; i < src.length; i ++ ) {
		c = src.charAt(i);
		if( (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9') )
			c = '_';
		s += c;
	}
	return s;
}

function trim(s)
{
    if (s == null)
    {
        return s;
    }

    var i;
    var beginIndex = 0;
    var endIndex = s.length - 1;

    for (i=0; i<s.length; i++)
    {
        if (s.charAt(i) == ' ' || s.charAt(i) == ' ')
        {
            beginIndex++;
        }
        else
        {
            break;
        }
    }

    for (i = s.length - 1; i >= 0; i--)
    {
        if (s.charAt(i) == ' ' || s.charAt(i) == ' ')
        {
            endIndex--;
        }
        else
        {
            break;
        }
    }

    if (endIndex < beginIndex)
    {
        return "";
    }

    return s.substring(beginIndex, endIndex + 1);
}

//查询是否为数字类型
function isDigit(cCheck) 
{ 
     return (('0'<=cCheck) && (cCheck<='9')); 
}

function checkNumber(s)
{
     if(s==null)return false; 
     s=trim(s);
     for (var i=0; i < s.length; i++)
           {
                   var c = s.charAt(i);
                if (!(isDigit(c)))
                {
                    return false;
                }
            }
      return true;
}
  相关解决方案