生产力的因素有两个,一个是人,一个是工具。工具用好与否,决定了我们是否提前下班。前言在业务开发过程中,我们经常会重复使用数据类型验证、日期格式化、数据加密、随机数生成、节流功能等工具和方法。这些工具功能经过适当的打包和组织,便于使用。可以提高开发效率。数据类型验证可能你喜欢把方法封装成ES6Class方法,但是考虑到使用的时候实例化起来比较麻烦(当然也可以写成静态方法),不过我还是习惯挂了对象属性的方法。如下:constValidator={};/***判断是否为数字,如:'123.1',123.1都为真**@static*@param{any}value*@returns*/Validator.isNumber=(值)=>{constre=/^[0-9]+\.?[0-9]*$/;returnre.test(value);};/***integernumber:2=true;'2'=true**@static*@param{any}value*@returns*/Validator.isIntNumber=(value)=>{if(value==='0'||value===0){return真的;}constre=/^[1-9]+[0-9]*]*$/;returnre.test(value);};/***integer2=true;'2'=false*该方法会严格区分字符串类型的数字*@static*@param{any}val*@returns*/Validator.isInt=(val)=>{if(Validator.isIntNumber(val)){returntypeofval==='number';}returnfalse;};/***是否是浮点型,如:'123.1'=false,123.1=true**@static*@param{any}value*@returns*/Validator.isFloat=(value)=>{constresult=Validator.isNumber(value);返回结果&&parseFloat===value;};/***时间戳判断**@static*@param{any}value*@returns*/Validator.isTimestamp=(value)=>{returntypeofvalue==='number';};/***验证电话号码**@static*@param{any}value*@returns*/Validator.isPhone=(value)=>{constreg=/^0?(1[34578])[0-9]{9}$/;returnreg.test(value);};/***Url验证**@static*@param{any}value*@returns*/Validator.isUrl=(value)=>{conststrRegex=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;returnstrRegex.test(value);};/***字母是否大写**@static*@param{any}value*@returns*/Validator.isCapital=(value)=>{constreg=/[A-Z]/;returnreg.test(value);};/***是否为空**@static*@param{any}value*@returns*/Validator.isEmpty=(value)=>{//返回值?true:错误的;返回!!价值;};/***是一个Object**@static*@param{any}value要判断的对象*@returns*/Validator.isObject=(value)=>{constkeys=Object.keys(valUE);constvalues=Object.values(value);console.log('对象typeof值是:',typeof值);returnkeys.length>0&&values.length>0&&typeofvalue==='object';};/***是否为空**@static*@param{any}value*@returns*/Validator.isNotEmpty=(value)=>{return!this.isEmpty(value);};验证器。isMobilePhone=(value)=>{constreg=/^(\+?0?86\-?)?1[345789]\d{9}$/;returnreg.test(value);};/***是否是monogoDB中的objectId值**@static*@param{any}value*@returns*/Validator.isMongoDBObjectId=(value)=>{returnobjectId.isValid(value);};/***这个方法特殊方法obj只能传一个对象。**@static*@param{any}objobject*@param{any}value值*/Validator.isObjectValue=(obj,value)=>{if(!Validator.isObject(obj)){returnfalse;}returnObject.values(obj).includes(value);};/***检测电子邮件*@paramemail*@returns{boolean}*/Validator.testEmail=(email)=>{constreg=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;returnreg.test(email);};/***身份证号码验证**@paramcardNo{String}身份证号码*@returnsinfo{Object}身份证信息。**/Validator.getIdCardInfo=(cardNo)=>{constinfo={isTrue:false,//身份证号码是否有效。默认为falseyear:null,//出生年份。默认为nullmonth:null,//出生月份。默认值为空day:null,//birthday.默认为nullisMale:false,//是否为男性。默认falseisFemale:false,//是否是女性。默认假};if(!cardNo&&cardNo.length!==15&&cardNo.length!==18){info.isTrue=false;返回信息;}if(cardNo.length===15){constyear=cardNo.substring(6,8);constmonth=cardNo.substring(8,10);constday=cardNo.substring(10,12);constp=cardNo.substring(14,15);//genderconstbirthday=newDate(year,parseFloat(month)-1,parseFloat(day),12,0,0,0);//对于旧身份证中的年龄,不用考虑Y2K问题,使用getYear()方法if(birthday.getYear()!==parseFloat(year)||birthday.getMonth()!==parseFloat(month)-1||birthday.getDate()!==parseFloat(day)){info.isTrue=false;}else{info.isTrue=true;info.year=birthday.getFullYear();info.month=birthday.getMonth()+1;info.day=birthday.getDate();如果(p%2===0){info.isFemale=true;info.isMale=false;}else{info.isFemale=false;info.isMale=true;}}返回信息;}if(cardNo.length===18){constyear=cardNo.substring(6,10);constmonth=cardNo.substring(10,12);constday=cardNo.substring(12,14);constp=cardNo.substring(14,17);constbirthday=newDate(year,parseFloat(month)-1,parseFloat(day),12,0,0,0);//此处使用getFullYear()获取年份以避免Y2K问题if(birthday.getFullYear()!==parseFloat(year)||birthday.getMonth()!==parseFloat(month)-1||birthday.getDate()!==parseFloat(day)){info.isTrue=false;返回信息;}constWi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];//权重因子constY=[1,0,10,9,8,7,6,5,4,3,2];//ID验证位值。10代表X//验证校验位letsum=0;//声明加权和变量const_cardNo=cardNo.split('');如果(_cardNo[17].toLowerCase()==='x'){_cardNo[17]=10;//将最后一位为x的验证码替换为10,方便后续操作}for(leti=0;i<17;i++){sum+=Wi[i]*_cardNo[i];//加权和}consti=sum%11;//获取验证码所在位置if(_cardNo[17]!==Y[i]){info.isTrue=false;返回信息;}info.isTrue=true;info.year=birthday.getFullYear();info.month=birthday.getMonth()+1;info.day=birthday.getDate();如果(p%2===0){info.isFemale=true;info.isMale=false;}else{info.isFemale=false;info.isMale=true;}返回信息;}返回信息;};module.exports=Validator;date格式化需要引入包,moment更方便处理时间constmoment=require('moment');constDateHandler={};/***获取当前时间(13位时间戳)1641185119507*@returns{number|*}*/DateHandler.getNowTime=()=>{returnnewDate().getTime();};/***格式化时间戳*@paramtimestamp*@parampatten*/DateHandler.formatDate=(timestamp,patten)=>{console.log(timestamp);returnmoment(timestamp).format(patten);};/***excel读取2018/01/01的时间格式时,会转换成类似46254.1545151415的数字*@paramnumbnumb为传入的整数*@paramformat是区间的符号*@returns{string}*/DateHandler.formatExcelDate=(numb,format)=>{consttime=newDate((numb-1)*24*3600000+1);time.setYear(time.getFullYear()-70);constyear=`${time.getFullYear()}`;constmonth=`${time.getMonth()+1}`;constdate=`${time.getDate()-1}`;if(format&&format.length===1){returnyear+format+month+format+date;}returnyear+(month<10?`0${month}`:month)+(date<10?`0${date}`:date);};/***格式毫秒*@paramt(ms)*@returns{string}*/DateHandler.formatTime=(t)=>{constHOUR=1000*60*60;constd=parseInt(t/(HOUR*24));consth=parseInt((t%(HOUR*24))/(HOUR));constm=parseInt((t%(HOUR))/(1000*60));consts=parseInt((t%(1000*60))/1000);让文字='';d&&(text+=`${d}天`);h&&(text+=`${h}小时`);m&&(text+=`${m}分`);s&&(text+=`${s}秒`);返回文本||'-';};module.exports=DateHandler;随机数据生成需要用到的包有,randomstring,lodash,dateformatconstrandomstring=require('randomstring');constdateformat=require('dateformat');const_=require('lodash');/***开始和结束之间的整数*@paramstart*@paramend*@returns{number}*@constructor*/NumHandler.Random=(start,end)=>{return_.random(start,end);};NumHandler.removeEmptyField=(list,field)=>{list.forEach(v=>(v[field].length===0?deletev[field]:this.removeEmptyField(v[字段],字段)));returnlist;};/***生成一个随机数*@paramndigits*@paramcollection*@returns{string}*/NumHandler.generateRandom=(n,collection=['0','1','2','3','4','5','6','7','8','9'])=>{letres='';for(leti=0;i
