常用的js验证和数据处理总结
前言
在开发web项目的时候,难免遇到各种对网页数据的处理,比如对用户在表单中输入的电话号码、邮箱、金额、身份证号、密码长度和复杂程度等等的验证,以及对后台返回
数据的格式化比如金额,返回的值为null,还有对指定日期之前或之后某一天或某一月的计算。
下面是给大家总结的一些在工作中常用到的js,有需要的可以参考学习。
/** *验证密码复杂度(必须包含数字字母) *@paramstr *@returnstrue:满足规则,false:不满足 */ functionvalidateStr(str){ varreg1=/^(([0-9]{1,})([a-z]{1,}))|(([a-z]{1,})([0-9]{1,}))$/; varreg2=/^(([0-9]{1,})([A-Z]{1,}))|(([A-Z]{1,})([0-9]{1,}))$/; //varreg3=/^([a-zA-Z]{0,})[0-9a-z-A-z]{0,}[~`!@#$%^&*.]{0,}$/; str=valueTrim(str); //if(reg3.test(str)){ //returntrue; //} if(reg1.test(str)){ returntrue; } if(reg2.test(str)){ returntrue; } returnfalse; } /** *判断字符串长度必须大于8位小于20位,一般用于密码 *@paramstr字符串 *@returns满足返回true */ functionvaliDateLength(str){ if(str==null||str==''){ returnfalse; } str=valueTrim(str); if(parseFloat(str.length)<8){ returnfalse; } if(parseFloat(str.length)>20){ returnfalse; } returntrue; } /** *验证时间 *@paramdataValue格式为:YYYY-MM-DD *@returns匹配返回true不匹配返回false */ functionvaliDate(dateValue){ varresult=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){ returnfalse; } returntrue; } /** *验证电话号码 *@paramphoneValue要验证的电话号码 *@returns匹配返回true不匹配返回false */ functionvalidatePhone(phoneValue){ phoneValue=valueTrim(phoneValue); varreg=/^[1][0-9]{10}$/; returnreg.test(phoneValue); } /** *验证邮箱 *@paramemailValue要验证的邮箱 *@returns匹配返回true不匹配返回false */ functionvalidateEmail(emailValue){ varreg=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; returnreg.test(emailValue); } /** *判断是否是数字 *@paramnumberValue要验证的数据 *@returns匹配返回true不匹配返回false */ functionisNumber(numberValue){ //定义正则表达式部分 varreg1=/^[0-9]{0,}$/; varreg2=/^[1-9]{1}[0-9]{0,}$/; //alert(numberValue); if(numberValue==null||numberValue.length==0){ returnfalse; } numberValue=valueTrim(numberValue); //判断当数字只有1位时 if(numberValue.length<2){ returnreg1.test(numberValue); } returnreg2.test(numberValue);; } /*** *金额 *@paramvalue *@returns */ functionisMoney(value){ if(value==''){ returnfalse; } value=valueTrim(value); value=value.replace(/(^\s*)|(\s*$)/g,""); varreg=/^[0-9]*\.?[0-9]{0,2}$/; if(isNumber(value)){ returntrue; } if(value.length>3){ if(value.substr(0,1)=="0"){ if(value.substr(3,value.length).length>2){ returnfalse; } } } returnreg.test(value); } /*** *判断是否是0到100之间的数 *@paramvalue *@returns */ functionisZeroToOne(value){ if(value==''){ returnfalse; } value=valueTrim(value); if(isMyFloat(value)){ if(parseFloat(value)<100&&parseFloat(value)>0){ returntrue; } } returnfalse; } /** *验证是否是浮点数 *@paramfloatValue要验证的数据 *@returns匹配返回true不匹配返回false */ functionisMyFloat(floatValue){ if(floatValue==''){ returnfalse; } floatValue=valueTrim(floatValue); varreg=/^(\d+)(\.\d+)$/; if(isNumber(floatValue)){ returntrue; } if(floatValue.length>3){ if(floatValue.substr(0,1)=="0"){ if(floatValue.substr(0,2)!="0."){ returnfalse; } } } returnreg.test(floatValue); } /** *判断是否是汉字 *@paramcharValue要验证的数据 *@returns匹配返回true不匹配返回false */ functionisCharacter(charValue){ varreg=/^[\u4e00-\u9fa5]{0,}$/; returnreg.test(charValue); } /** *验证座机号 *@paramtelValue要验证的座机号 *@returns匹配返回true不匹配返回false */ functionvaliDateTel(telValue){ varreg=/^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/; telValue=valueTrim(telValue); if(!reg.test(telValue)){ returnfalse; } returntrue; } varWi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];//加权因子 varValideCode=[1,0,10,9,8,7,6,5,4,3,2];//身份证验证位值.10代表X /** *验证身份证 *@paramidCard需要验证的身份证号 *@returns匹配返回true不匹配返回false */ functionIdCardValidate(idCardValue){ //去掉字符串头尾空格 idCardValue=valueTrim(idCardValue.replace(//g,"")); if(idCardValue.length==15){ //进行15位身份证的验证 returnisValidityBrithBy15IdCard(idCardValue); }elseif(idCardValue.length==18){ //得到身份证数组 vara_idCard=idCardValue.split(""); //进行18位身份证的基本验证和第18位的验证 if(isValidityBrithBy18IdCard(idCardValue)&&isTrueValidateCodeBy18IdCard(a_idCard)){ returntrue; }else{ returnfalse; } }else{ returnfalse; } } /** *判断身份证号码为18位时最后的验证位是否正确 *@parama_idCard身份证号码数组 *@return */ functionisTrueValidateCodeBy18IdCard(a_idCard){ varsum=0;//声明加权求和变量 if(a_idCard[17].toLowerCase()=='x'){ a_idCard[17]=10;//将最后位为x的验证码替换为10方便后续操作 } for(vari=0;i<17;i++){ sum+=Wi[i]*a_idCard[i];//加权求和 } valCodePosition=sum%11;//得到验证码所位置 if(a_idCard[17]==ValideCode[valCodePosition]){ returntrue; }else{ returnfalse; } } /** *验证18位数身份证号码中的生日是否是有效生日 *@paramidCard18位书身份证字符串 *@return */ functionisValidityBrithBy18IdCard(idCard18){ varyear=idCard18.substring(6,10); varmonth=idCard18.substring(10,12); varday=idCard18.substring(12,14); vartemp_date=newDate(year,parseFloat(month)-1,parseFloat(day)); //这里用getFullYear()获取年份,避免千年虫问题 if(temp_date.getFullYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ returnfalse; }else{ returntrue; } } /** *验证15位数身份证号码中的生日是否是有效生日 *@paramidCard1515位书身份证字符串 *@return */ functionisValidityBrithBy15IdCard(idCard15){ varyear=idCard15.substring(6,8); varmonth=idCard15.substring(8,10); varday=idCard15.substring(10,12); vartemp_date=newDate(year,parseFloat(month)-1,parseFloat(day)); //对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法 if(temp_date.getYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ returnfalse; }else{ returntrue; } } //去掉字符串头尾空格 functionvalueTrim(str){ returnstr.replace(/(^\s*)|(\s*$)/g,""); } /** *检验18位身份证号码(15位号码可以只检测生日是否正确即可,自行解决) *@paramidCardValue18位身份证号 *@returns匹配返回true不匹配返回false */ functionidCardVildate(cid){ vararrExp=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];//加权因子 vararrValid=[1,0,"X",9,8,7,6,5,4,3,2];//校验码 varreg=/^[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)){ varsum=0,idx; for(vari=0;i<cid.length-1;i++){ //对前17位数字与权值乘积求和 sum+=parseInt(cid.substr(i,1),10)*arrExp[i]; } //计算模(固定算法) idx=sum%11; //检验第18为是否与校验码相等 returnarrValid[idx]==cid.substr(17,1).toUpperCase(); }else{ returnfalse; } } /** *获取指定日期之前或之后的第几天 * *@paramdayCount *正数为以后时间,负数为以前时间如:1表示为明天,-1为昨天 * */ functiongetDateStr(dates,dayCount){ vardateTime=dayCount*24*60*60*1000; vardd=newDate(); if(dates==""){ dd=newDate(); }else{ dd=newDate(dates); } vardateNumber=dd.getTime()+dateTime; varnewDate=newDate(dateNumber); vary=newDate.getFullYear(); varm=newDate.getMonth()+1;//获取当前月份的日期 vard=newDate.getDate(); if(m<10){ m="0"+m; } if(d<10){ d="0"+d; } returny+"-"+m+"-"+d; } /** *获取指定月份的之前或之后的第几个月 * *@paramdayCount *正数为以后月份,负数为以前月份如:1表示为下月,-1为上月 * */ functiongetMonthStr(dates,monthCount){ vardd=newDate(); if(dates==""){ dd=newDate(); }else{ dd=newDate(dates); } vary=dd.getFullYear(); varm=dd.getMonth()+1;//获取当前月份的日期 m=m+monthCount; if(m==0){ m="12"; y=y-1; }elseif(m<10){ m="0"+m; }elseif(m>12){ m=m-12; m="0"+m; y=y+1; } returny+"-"+m; } /** * *对val值为undefined返回“”,否则返回原值 */ functiondealNull(val){ if(typeof(val)=="undefined"){ return""; }else{ returnval; } }
总结
以上就是为大家整理的比较实用的js验证和数据处理的干货,对大家日常工作的时候很有帮助,建议大家收藏,方便以后查阅,谢谢大家对毛票票的支持。