工作中比较实用的JavaScript验证和数据处理的干货(经典)
在开发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;
}
}
以上所述是小编给大家介绍的工作中比较实用的JavaScript验证和数据处理的干货(经典),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!