因为要做静态地址配置的js校验,找了好多资料发现网上都是关于ip,mask的有效性检查,没有ip,submask,gateway的逻辑性判断,自己写下代码供需要的人参考。
普及下网关地址知识:
就是进行与运算1与1得1,1与0为0,0与0为0。首先把ip和子网掩码展开 10.70.64.223 00001010 .01000110.01000000.11011111 255.255.255。0 111111111.11111111.11111111.00000000 网段就是 00001010 .01000110.01000000.00000000 然后转换成十进制就是:10.70.64.0 IP地址与子网掩码做与运算和网关地址与子网掩码做与运算得到的结果应该是一致的就对了,也就是主机号一致。 我这里是先用js将ip,mask,gateway按照‘.’分隔后相与做判断的。 js的按位与运算: result = 【整数1】 & 【整数1】 & 对两个 32 位表达式的每一个位执行按位“与”运算。 如果两个位均为 1,则结果是 1。 否则,结果为 0。
function checkIP(ip)
{
obj=ip;
var exp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
var reg = obj.match(exp);
if(reg==null)
{
return false;//不合法
}
else
{
return true; //合法
}
}
function checkMask(mask)
{
obj=mask;
var exp=/^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/;
var reg = obj.match(exp);
if(reg==null)
{
return false; //"非法"
}
else
{
return true; //"合法"
}
}
var static_ip= document.getElementById('static_ip').value;
var static_mask= document.getElementById('static_mask').value;
var static_gw= document.getElementById('static_gw').value;
if (static_ip=='')
{
// $("#static_ip_error").css("display","block");
document.getElementById('static_ip').focus();
return false;
}else if(!checkIP(static_ip))
{
//$("#static_ip_error").css("display","none");
document.getElementById('static_ip').focus();
return false;
}
if(static_mask=='')
{
//$("#static_mask_error").css("display","block");
document.getElementById('static_mask').focus();
return false;
}else if(!checkMask(static_mask))
{
//$("#static_mask_error").css("display","none");
document.getElementById('static_mask').focus();
return false;
}
if(static_gw=='')
{
//$("#static_gw_error").css("display","block");
document.getElementById('static_gw').focus();
return false;
}else if(!checkIP(static_gw))
{
//$("#static_gw_error").css("display","none");
document.getElementById('static_gw').focus();
return false;
}