js针对ip地址、子网掩码、网关的逻辑性判断


Posted in Javascript onJanuary 06, 2016

因为要做静态地址配置的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。

分享js针对ip地址、子网掩码、网关的逻辑性判断详细代码

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;    
  } 
 

 if(static_ip == static_mask || static_mask == static_gw || static_mask == static_gw)
 {
  alert('地址输入错误!');
  return false; //3个地址不能相同
 }
 
 var static_ip_arr = new Array;
 var static_mask_arr = new Array;
 var static_gw_arr = new Array;
  
 static_ip_arr = static_ip.split(".");
 static_mask_arr = static_mask.split(".");
 static_gw_arr = static_gw.split(".");

 var res0 = parseInt(lan_ip_arr[0]) & parseInt(static_mask_arr[0]);
 var res1 = parseInt(lan_ip_arr[1]) & parseInt(static_mask_arr[1]);
 var res2 = parseInt(lan_ip_arr[2]) & parseInt(static_mask_arr[2]);
 var res3 = parseInt(lan_ip_arr[3]) & parseInt(static_mask_arr[3]);
 
 var res0_gw = parseInt(static_gw_arr[0]) & parseInt(static_mask_arr[0]);
 var res1_gw = parseInt(static_gw_arr[1]) & parseInt(static_mask_arr[1]);
 var res2_gw = parseInt(static_gw_arr[2]) & parseInt(static_mask_arr[2]);
 var res3_gw = parseInt(static_gw_arr[3]) & parseInt(static_mask_arr[3]);
 
 if(res0==res0_gw && res1==res1_gw && res2==res2_gw && res3==res3_gw)
 {
  
 }else{
  alert('IP地址与子网掩码、网关地址不匹配!');
  return false;
 }

js验证IP及子网掩码的合法性代码分享:

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; //"合法"
  } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JavaScript几种形式的树结构菜单
May 10 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 Javascript
你不可不知的Vue.js列表渲染详解
Oct 01 Javascript
js实现蒙版效果
Jan 11 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 Javascript
Vue切换div显示隐藏,多选,单选代码解析
Jul 14 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 #Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 #Javascript
javascript中闭包(Closure)详解
Jan 06 #Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 #Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 #Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 #Javascript
javascript实现简单的全选和反选功能
Jan 05 #Javascript
You might like
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
php-fpm中max_children的配置
2019/03/15 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
python原始套接字编程示例分享
2014/02/21 Python
python中对list去重的多种方法
2014/09/18 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python简单猜数游戏实例
2015/07/09 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
详解Python学习之安装pandas
2019/04/16 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
企业申诉管理制度
2014/01/30 职场文书
索桥的故事教学反思
2014/02/06 职场文书
土地转让协议书
2014/09/27 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年度企业工作总结
2015/05/21 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python