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 相关文章推荐
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
jQuery选择器源码解读(八):addCombinator函数
Mar 31 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
Sep 11 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
js学习总结_选项卡封装(实例讲解)
Jul 13 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
Vue中的无限加载vue-infinite-loading的方法
Apr 08 Javascript
小程序自定义组件实现城市选择功能
Jul 18 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
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
咖啡知识大全
2021/03/03 新手入门
一个php作的文本留言本的例子(三)
2006/10/09 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
php获取域名的google收录示例
2014/03/24 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
基于python plotly交互式图表大全
2019/12/07 Python
python保留小数位的三种实现方法
2020/01/07 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
成绩单公证书
2014/04/10 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
2015小学师德工作总结
2015/07/21 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS