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 相关文章推荐
jQuery 使用手册(一)
Sep 23 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
jquery实现可关闭的倒计时广告特效代码
Sep 02 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 Javascript
Angularjs中使用layDate日期控件示例
Jan 11 Javascript
基于jQuery的表单填充实例
Aug 22 jQuery
解读vue生成的文件目录结构及说明
Nov 27 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php字符串截取的简单方法
2013/07/04 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php实现的日历程序
2015/06/18 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
Javascript学习指南
2014/12/01 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
python 获取本机ip地址的两个方法
2013/02/25 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
财政局长自荐信范文
2013/12/22 职场文书
高三历史教学反思
2014/01/09 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
法人代表证明书
2014/09/18 职场文书
入党转正申请书范文
2019/05/20 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript