常用的js验证和数据处理总结


Posted in Javascript onAugust 02, 2016

前言

在开发web项目的时候,难免遇到各种对网页数据的处理,比如对用户在表单中输入的电话号码、邮箱、金额、身份证号、密码长度和复杂程度等等的验证,以及对后台返回
数据的格式化比如金额,返回的值为null,还有对指定日期之前或之后某一天或某一月的计算。

下面是给大家总结的一些在工作中常用到的js,有需要的可以参考学习。

/** 
 * 验证密码复杂度(必须包含数字字母) 
 * @param str 
 * @returns true:满足规则,false:不满足 
 */ 
function validateStr(str){ 
  var reg1 = /^(([0-9]{1,})([a-z]{1,}))|(([a-z]{1,})([0-9]{1,}))$/; 
  var reg2 = /^(([0-9]{1,})([A-Z]{1,}))|(([A-Z]{1,})([0-9]{1,}))$/; 
  //var reg3 = /^([a-zA-Z]{0,})[0-9a-z-A-z]{0,}[~`!@#$%^&*.]{0,}$/; 
  str = valueTrim(str); 
  //if(reg3.test(str)){ 
  // return true; 
  //} 
  if(reg1.test(str)){ 
    return true; 
  } 
  if(reg2.test(str)){ 
    return true; 
  } 
  return false; 
} 
 
 
/** 
 * 判断字符串长度 必须大于8位小于20位,一般用于密码 
 * @param str 字符串 
 * @returns 满足返回true 
 */ 
function valiDateLength(str){ 
  if(str==null || str==''){ 
    return false; 
  } 
  str = valueTrim(str); 
  if(parseFloat(str.length)<8 ){ 
    return false; 
  } 
  if(parseFloat(str.length)>20){ 
    return false; 
  } 
  return true; 
} 
/** 
 * 验证时间 
 * @param dataValue 格式为:YYYY-MM-DD 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function valiDate(dateValue){ 
  var result = dateValue.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(-)(10|12|0?[13578])(-)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(11|0?[469])(-)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(-)(0?2)(-)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(-)(0?2)(-)(29)$)|(^([3579][26]00)(-)(0?2)(-)(29)$)|(^([1][89][0][48])(-)(0?2)(-)(29)$)|(^([2-9][0-9][0][48])(-)(0?2)(-)(29)$)|(^([1][89][2468][048])(-)(0?2)(-)(29)$)|(^([2-9][0-9][2468][048])(-)(0?2)(-)(29)$)|(^([1][89][13579][26])(-)(0?2)(-)(29)$)|(^([2-9][0-9][13579][26])(-)(0?2)(-)(29)$))/); 
  if(result==null){ 
    return false; 
  } 
  return true; 
} 
 
/** 
 * 验证电话号码 
 * @param phoneValue 要验证的电话号码 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function validatePhone(phoneValue) { 
  phoneValue = valueTrim(phoneValue); 
  var reg = /^[1][0-9]{10}$/; 
  return reg.test(phoneValue); 
} 
/** 
 * 验证邮箱 
 * @param emailValue 要验证的邮箱 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function validateEmail(emailValue){ 
  var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; 
  return reg.test(emailValue); 
} 
/** 
 * 判断是否是数字 
 * @param numberValue 要验证的数据 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function isNumber(numberValue){ 
  //定义正则表达式部分   
  var reg1 = /^[0-9]{0,}$/; 
  var reg2 = /^[1-9]{1}[0-9]{0,}$/; 
  //alert(numberValue); 
  if(numberValue ==null || numberValue.length==0){ 
    return false; 
  } 
  numberValue = valueTrim(numberValue); 
  //判断当数字只有1位时 
  if(numberValue.length<2){ 
    return reg1.test(numberValue); 
  } 
  return reg2.test(numberValue);; 
} 
/*** 
 * 金额 
 * @param value 
 * @returns 
 */ 
function isMoney(value) { 
  if(value==''){ 
    return false; 
  } 
  value = valueTrim(value); 
  value = value.replace(/(^\s*)|(\s*$)/g, ""); 
  var reg = /^[0-9]*\.?[0-9]{0,2}$/; 
  if(isNumber(value)){ 
    return true; 
  } 
  if(value.length>3){ 
    if(value.substr(0, 1)=="0"){ 
      if(value.substr(3,value.length).length>2){ 
        return false; 
      }  
    } 
  } 
  return reg.test(value); 
} 
/*** 
 * 判断是否是0到100之间的数 
 * @param value 
 * @returns 
 */ 
function isZeroToOne(value) { 
  if(value==''){ 
    return false; 
  } 
  value = valueTrim(value); 
  if(isMyFloat(value)){ 
    if(parseFloat(value)<100 && parseFloat(value)>0){ 
      return true; 
    } 
  } 
  return false; 
} 
 
/** 
 * 验证是否是浮点数 
 * @param floatValue 要验证的数据 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function isMyFloat(floatValue){ 
  if(floatValue==''){ 
    return false; 
  } 
  floatValue = valueTrim(floatValue); 
  var reg = /^(\d+)(\.\d+)$/; 
  if(isNumber(floatValue)){ 
    return true; 
  } 
  if(floatValue.length>3){ 
    if(floatValue.substr(0, 1)=="0"){ 
      if(floatValue.substr(0, 2)!="0."){ 
        return false; 
      }  
    } 
  } 
  return reg.test(floatValue); 
} 
/** 
 * 判断是否是汉字 
 * @param charValue 要验证的数据 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function isCharacter(charValue){ 
  var reg = /^[\u4e00-\u9fa5]{0,}$/; 
  return reg.test(charValue); 
} 
/** 
 * 验证座机号 
 * @param telValue 要验证的座机号 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function valiDateTel(telValue){ 
  var reg = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/; 
  telValue = valueTrim(telValue); 
  if(!reg.test(telValue)){ 
    return false; 
  } 
  return true; 
} 
 
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];  // 加权因子   
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];      // 身份证验证位值.10代表X 
/** 
 * 验证身份证 
 * @param idCard 需要验证的身份证号 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function IdCardValidate(idCardValue) { 
  //去掉字符串头尾空格 
  idCardValue = valueTrim(idCardValue.replace(/ /g, ""));            
  if (idCardValue.length == 15) { 
    //进行15位身份证的验证  
    return isValidityBrithBy15IdCard(idCardValue);   
  } else if (idCardValue.length == 18) { 
    // 得到身份证数组  
    var a_idCard = idCardValue.split("");  
    //进行18位身份证的基本验证和第18位的验证 
    if(isValidityBrithBy18IdCard(idCardValue)&&isTrueValidateCodeBy18IdCard(a_idCard)){ 
      return true;   
    }else {   
      return false; 
    }   
  } else { 
    return false;   
  }   
}   
/**  
 * 判断身份证号码为18位时最后的验证位是否正确  
 * @param a_idCard 身份证号码数组  
 * @return  
 */  
function isTrueValidateCodeBy18IdCard(a_idCard) {   
  var sum = 0; // 声明加权求和变量   
  if (a_idCard[17].toLowerCase() == 'x') {   
    a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作   
  }   
  for ( var i = 0; i < 17; i++) {   
    sum += Wi[i] * a_idCard[i];// 加权求和   
  }   
  valCodePosition = sum % 11; // 得到验证码所位置   
  if (a_idCard[17] == ValideCode[valCodePosition]) {   
    return true;   
  } else {   
    return false;   
  }   
}   
/**  
 * 验证18位数身份证号码中的生日是否是有效生日  
 * @param idCard 18位书身份证字符串  
 * @return  
 */  
function isValidityBrithBy18IdCard(idCard18){   
  var year = idCard18.substring(6,10);   
  var month = idCard18.substring(10,12);   
  var day = idCard18.substring(12,14);   
  var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
  // 这里用getFullYear()获取年份,避免千年虫问题   
  if(temp_date.getFullYear()!=parseFloat(year)   
     ||temp_date.getMonth()!=parseFloat(month)-1   
     ||temp_date.getDate()!=parseFloat(day)){   
      return false;   
  }else{   
    return true;   
  }   
}   
/**  
 * 验证15位数身份证号码中的生日是否是有效生日  
 * @param idCard15 15位书身份证字符串  
 * @return  
 */  
function isValidityBrithBy15IdCard(idCard15){   
  var year = idCard15.substring(6,8);   
  var month = idCard15.substring(8,10);   
  var day = idCard15.substring(10,12);   
  var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
  // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法   
  if(temp_date.getYear()!=parseFloat(year)   
      ||temp_date.getMonth()!=parseFloat(month)-1   
      ||temp_date.getDate()!=parseFloat(day)){   
    return false;   
  }else{   
    return true;   
  }   
}   
//去掉字符串头尾空格   
function valueTrim(str) {   
  return str.replace(/(^\s*)|(\s*$)/g, "");   
} 
 
/** 
 * 检验18位身份证号码(15位号码可以只检测生日是否正确即可,自行解决) 
 * @param idCardValue 18位身份证号 
 * @returns 匹配返回true 不匹配返回false 
 */ 
function idCardVildate(cid){ 
  var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子 
  var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码 
  var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/; 
  if(reg.test(cid)){ 
    var sum = 0, idx; 
    for(var i = 0; i < cid.length - 1; i++){ 
      // 对前17位数字与权值乘积求和 
      sum += parseInt(cid.substr(i, 1), 10) * arrExp[i]; 
    } 
    // 计算模(固定算法) 
    idx = sum % 11; 
    // 检验第18为是否与校验码相等 
    return arrValid[idx] == cid.substr(17, 1).toUpperCase(); 
  }else{ 
    return false; 
  } 
} 
 
/** 
 * 获取指定日期之前或之后的第几天 
 * 
 * @param dayCount 
 *      正数为以后时间,负数为以前时间 如:1表示为明天,-1为昨天 
 * 
 */ 
function getDateStr(dates, dayCount) { 
  var dateTime = dayCount * 24 * 60 * 60 * 1000; 
  var dd = new Date(); 
  if (dates == "") { 
    dd = new Date(); 
  } else { 
    dd = new Date(dates); 
  } 
  var dateNumber = dd.getTime() + dateTime; 
  var newDate = new Date(dateNumber); 
  var y = newDate.getFullYear(); 
  var m = newDate.getMonth() + 1;// 获取当前月份的日期 
  var d = newDate.getDate(); 
  if (m < 10) { 
    m = "0" + m; 
  } 
  if (d < 10) { 
    d = "0" + d; 
  } 
  return y + "-" + m + "-" + d; 
} 
/** 
 * 获取指定月份的之前或之后的第几个月 
 * 
 * @param dayCount 
 *      正数为以后月份,负数为以前月份 如:1表示为下月,-1为上月 
 * 
 */ 
function getMonthStr(dates, monthCount) { 
  var dd = new Date(); 
  if (dates == "") { 
    dd = new Date(); 
  } else { 
    dd = new Date(dates); 
  } 
  var y = dd.getFullYear(); 
  var m = dd.getMonth() + 1;// 获取当前月份的日期 
  m = m + monthCount; 
  if (m == 0) { 
    m = "12"; 
    y = y - 1; 
  } else if (m < 10) { 
    m = "0" + m; 
  } else if (m > 12) { 
    m = m - 12; 
    m = "0" + m; 
    y = y + 1; 
  } 
  return y + "-" + m; 
} 
/** 
* 
*对val值为undefined返回“”,否则返回原值 
*/ 
function dealNull(val) { 
  if (typeof (val) == "undefined") { 
    return ""; 
  } else { 
    return val; 
  } 
}

总结

以上就是为大家整理的比较实用的js验证和数据处理的干货,对大家日常工作的时候很有帮助,建议大家收藏,方便以后查阅,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
页面中js执行顺序
Nov 09 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
Aug 30 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 Javascript
nuxt 每个页面head标签内容设置方式
Nov 05 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
Jun 25 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
Aug 02 #Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
Aug 02 #Javascript
AngularJS基础 ng-mouseleave 指令详解
Aug 02 #Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 #Javascript
实现React单页应用的方法详解
Aug 02 #Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 #Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
Aug 02 #Javascript
You might like
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python基类函数的重载与调用实例分析
2015/01/12 Python
Python面向对象类的继承实例详解
2018/06/27 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
django model object序列化实例
2020/03/13 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
EJB的几种类型
2012/08/15 面试题
abstract class和interface有什么区别
2013/08/04 面试题
建筑工程专业毕业生自荐信
2013/10/19 职场文书
绩效工资分配方案
2014/01/18 职场文书
学校联谊协议书
2014/09/16 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
杭白菊导游词
2015/02/10 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python