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 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
用JavaScript仿PS里的羽化效果代码
Dec 20 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
js完美解决IE6不支持position:fixed的bug
Apr 24 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
Vue shopCart 组件开发详解
Jan 26 Javascript
在vscode里使用.vue代码模板的方法
Apr 28 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 Javascript
Ajax实现异步加载数据
Nov 17 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
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
详解Python3中的Sequence type的使用
2015/08/01 Python
python实现报表自动化详解
2017/11/16 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
python实现操作文件(文件夹)
2019/10/31 Python
python集合删除多种方法详解
2020/02/10 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
python实现数字炸弹游戏程序
2020/07/17 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
现代化办公人员工作的自我评价
2013/10/16 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
Go标准容器之Ring的使用说明
2021/05/05 Golang
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
JS 基本概念详细介绍
2021/10/16 Javascript
python中if和elif的区别介绍
2021/11/07 Python