常用的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 相关文章推荐
模仿jQuery each函数的链式调用
Jul 22 Javascript
javascript 函数使用说明
Apr 07 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
js获得参数的getParameter使用示例
Feb 26 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 Javascript
微信小程序如何获取手机验证码
Nov 04 Javascript
对vue中的事件穿透与禁止穿透实例详解
Oct 28 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动态创建Flash动画
2006/10/09 PHP
php使用curl访问https示例分享
2014/01/17 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
jquery改变tr背景色的示例代码
2013/12/28 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
python将ip地址转换成整数的方法
2015/03/17 Python
在Django中创建第一个静态视图
2015/07/15 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
活动策划求职信模板
2014/04/21 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015年酒店工作总结
2015/04/28 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫