1.邮箱
exportconstisEmail=(s)=>{return/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)}
2.手机号码
exportconstisMobile=(s)=>{return/^1[0-9]{10}$/.test(s)}
3.电话号码
exportconstisPhone=(s)=>{return/^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)}
4.是否url地址
exportconstisURL=(s)=>{return/^http[s]?:\/\/.*/.test(s)}
5.是否字符串
exportconstisString=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='String'}
6.是否数字
exportconstisNumber=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Number'}
7.是否boolean
exportconstisBoolean=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Boolean'}
8.是否函数
exportconstisFunction=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Function'}
9.是否为null
exportconstisNull=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Null'}
10.是否undefined
exportconstisUndefined=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Undefined'}
11.是否对象
exportconstisObj=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Object'}
12.是否数组
exportconstisArray=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Array'}
13.是否时间
exportconstisDate=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Date'}
14.是否正则
exportconstisRegExp=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='RegExp'}
15.是否错误对象
exportconstisError=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Error'}
16.是否Symbol函数
exportconstisSymbol=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Symbol'}
17.是否Promise对象
exportconstisPromise=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Promise'}
18.是否Set对象
exportconstisSet=(o)=>{returnObject.prototype.toString.call(o).slice(8,-1)==='Set'}exportconstua=navigator.userAgent.toLowerCase();
19.是否是微信浏览器
exportconstisWeiXin=()=>{returnua.match(/microMessenger/i)=='micromessenger'}
20.是否是移动端
exportconstisDeviceMobile=()=>{return/android|webos|iphone|ipod|balckberry/i.test(ua)}
21.是否是QQ浏览器
exportconstisQQBrowser=()=>{return!!ua.match(/mqqbrowser|qzone|qqbrowser|qbwebviewtype/i)}
22.是否是爬虫
export const isSpider=()=>{return/adsbot|googlebot|bingbot|msnbot|yandexbot|baidubot|robot|careerbot|seznambot|bot|baiduspider|jikespider|symantecspider|scannerlwebcrawler|crawler|360spider|sosospider|sogou web sprider|sogou orion spider/.test(ua)}
23.是否ios
exportconstisIos=()=>{varu=navigator.userAgent;if(u.indexOf('Android')>-1||u.indexOf('Linux')>-1){//安卓手机returnfalse}elseif(u.indexOf('iPhone')>-1){//苹果手机returntrue}elseif(u.indexOf('iPad')>-1){//iPadreturnfalse}elseif(u.indexOf('Windows Phone')>-1){//winphone手机returnfalse}else{returnfalse}}
24.是否为PC端
exportconstisPC=()=>{varuserAgentInfo=navigator.userAgent;varAgents=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"];varflag=true;for(varv=0;v<Agents.length;v++){if(userAgentInfo.indexOf(Agents[v])>0){flag=false;break;}}returnflag;}
25.去除html标签
exportconstremoveHtmltag=(str)=>{returnstr.replace(/<[^>]+>/g,'')}
26.获取url参数
exportconstgetQueryString=(name)=>{constreg=newRegExp('(^|&)'+name+'=([^&]*)(&|$)','i');constsearch=window.location.search.split('?')[1]||'';constr=search.match(reg)||[];returnr[2];}
27.动态引入js
exportconstinjectScript=(src)=>{consts=document.createElement('script');s.type='text/javascript';s.async=true;s.src=src;constt=document.getElementsByTagName('script')[0];t.parentNode.insertBefore(s,t);}
28.根据url地址下载
exportconstdownload=(url)=>{varisChrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1;varisSafari=navigator.userAgent.toLowerCase().indexOf('safari')>-1;if(isChrome||isSafari){varlink=document.createElement('a');link.href=url;if(link.download!==undefined){varfileName=url.substring(url.lastIndexOf('/')+1,url.length);link.download=fileName;}if(document.createEvent){vare=document.createEvent('MouseEvents');e.initEvent('click',true,true);link.dispatchEvent(e);returntrue;}}if(url.indexOf('?')===-1){url+='?download';}window.open(url,'_self');returntrue;}
29.el是否包含某个class
export const hasClass = (el, className) => {
let reg = new RegExp('(^|\s)' + className + '(\s|$)')
return reg.test(el.className)
}
30.el添加某个class
exportconstaddClass=(el,className)=>{if(hasClass(el,className)){return}letnewClass=el.className.split(' ')newClass.push(className)el.className=newClass.join(' ')}
31.el去除某个class
exportconstremoveClass=(el,className)=>{if(!hasClass(el,className)){return}letreg=newRegExp('(^|\\s)'+className+'(\\s|$)','g')el.className=el.className.replace(reg,' ')}
32.获取滚动的坐标
exportconstgetScrollPosition=(el=window)=>({x:el.pageXOffset!==undefined?el.pageXOffset:el.scrollLeft,y:el.pageYOffset!==undefined?el.pageYOffset:el.scrollTop});
33.滚动到顶部
exportconstscrollToTop=()=>{constc=document.documentElement.scrollTop||document.body.scrollTop;if(c>0){window.requestAnimationFrame(scrollToTop);window.scrollTo(0,c-c/8);}}
34.el是否在视口范围内
export const elementIsVisibleInViewport=(el,partiallyVisible=false)=>{const{top,left,bottom,right}=el.getBoundingClientRect();const{innerHeight,innerWidth}=window;returnpartiallyVisible?((top>0&&top<innerHeight)||(bottom>0&&bottom<innerHeight))&&((left>0&&left<innerWidth)||(right>0&&right<innerWidth)):top>=0&&left>=0&&bottom<=innerHeight&&right<=innerWidth;}
35.洗牌算法随机
exportconstshuffle=(arr)=>{varresult=[],random;while(arr.length>0){random=Math.floor(Math.random()*arr.length);result.push(arr[random])arr.splice(random,1)}returnresult;}
36.拦截粘贴板
exportconstcopyTextToClipboard=(value)=>{vartextArea=document.createElement("textarea");textArea.style.background='transparent';textArea.value=value;document.body.appendChild(textArea);textArea.select();try{varsuccessful=document.execCommand('copy');}catch(err){console.log('Oops, unable to copy');}document.body.removeChild(textArea);}
37.判断类型集合
exportconstcheckStr=(str,type)=>{switch(type){case'phone'://手机号码return/^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);case'tel'://座机return/^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);case'card'://身份证return/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);case'pwd'://密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线return/^[a-zA-Z]\w{5,17}$/.test(str)case'postal'://邮政编码return/[1-9]\d{5}(?!\d)/.test(str);case'QQ'://QQ号return/^[1-9][0-9]{4,9}$/.test(str);case'email'://邮箱return/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);case'money'://金额(小数点2位)return/^\d*(?:\.\d{0,2})?$/.test(str);case'URL'://网址return/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)case'IP'://IPreturn/((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);case'date'://日期时间return/^(\d{4})\-(\d{2})\-(\d{2})(\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str)||/^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)case'number'://数字return/^[0-9]$/.test(str);case'english'://英文return/^[a-zA-Z]+$/.test(str);case'chinese'://中文return/^[\\u4E00-\\u9FA5]+$/.test(str);case'lower'://小写return/^[a-z]+$/.test(str);case'upper'://大写return/^[A-Z]+$/.test(str);case'HTML'://HTML标记return/<("[^"]*"|'[^']*'|[^'">])*>/.test(str);default:returntrue;}}
38.严格的身份证校验
exportconstisCardID=(sId)=>{if(!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)){console.log('你输入的身份证长度或格式错误')returnfalse}//身份证城市varaCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};if(!aCity[parseInt(sId.substr(0,2))]){console.log('你的身份证地区非法')returnfalse}// 出生日期验证varsBirthday=(sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2))).replace(/-/g,"/"),d=newDate(sBirthday)if(sBirthday!=(d.getFullYear()+"/"+(d.getMonth()+1)+"/"+d.getDate())){console.log('身份证上的出生日期非法')returnfalse}// 身份证号码校验varsum=0,weights=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],codes="10X98765432"for(vari=0;i<sId.length-1;i++){sum+=sId[i]*weights[i];}varlast=codes[sum%11];//计算出来的最后一位身份证号码if(sId[sId.length-1]!=last){console.log('你输入的身份证号非法')returnfalse}returntrue}
39.随机数范围
exportconstrandom=(min,max)=>{if(arguments.length===2){returnMath.floor(min+Math.random()*((max+1)-min))}else{returnnull;}}
40.将阿拉伯数字翻译成中文的大写数字
exportconstnumberToChinese=(num)=>{varAA=newArray("零","一","二","三","四","五","六","七","八","九","十");varBB=newArray("","十","百","仟","萬","億","点","");vara=(""+num).replace(/(^0*)/g,"").split("."),k=0,re="";for(vari=a[0].length-1;i>=0;i--){switch(k){case0:re=BB[7]+re;break;case4:if(!newRegExp("0{4}//d{"+(a[0].length-i-1)+"}$").test(a[0]))re=BB[4]+re;break;case8:re=BB[5]+re;BB[7]=BB[5];k=0;break;}if(k%4==2&&a[0].charAt(i+2)!=0&&a[0].charAt(i+1)==0)re=AA[0]+re;if(a[0].charAt(i)!=0)re=AA[a[0].charAt(i)]+BB[k%4]+re;k++;}if(a.length>1)// 加上小数部分(如果有小数部分){re+=BB[6];for(vari=0;i<a[1].length;i++)re+=AA[a[1].charAt(i)];}if(re=='一十')re="十";if(re.match(/^一/)&&re.length==3)re=re.replace("一","");returnre;}
41.将数字转换为大写金额
exportconstchangeToChinese=(Num)=>{//判断如果传递进来的不是字符的话转换为字符if(typeof Num=="number"){Num=newString(Num);};Num=Num.replace(/,/g,"")//替换tomoney()中的“,”Num=Num.replace(//g,"")//替换tomoney()中的空格Num=Num.replace(/¥/g,"")//替换掉可能出现的¥字符if(isNaN(Num)){//验证输入的字符是否为数字//alert("请检查小写金额是否正确");return"";};//字符处理完毕后开始转换,采用前后两部分分别转换varpart=String(Num).split(".");varnewchar="";//小数点前进行转化for(vari=part[0].length-1;i>=0;i--){if(part[0].length>10){return"";//若数量超过拾亿单位,提示}vartmpnewchar=""varperchar=part[0].charAt(i);switch(perchar){case"0":tmpnewchar="零"+tmpnewchar;break;case"1":tmpnewchar="壹"+tmpnewchar;break;case"2":tmpnewchar="贰"+tmpnewchar;break;case"3":tmpnewchar="叁"+tmpnewchar;break;case"4":tmpnewchar="肆"+tmpnewchar;break;case"5":tmpnewchar="伍"+tmpnewchar;break;case"6":tmpnewchar="陆"+tmpnewchar;break;case"7":tmpnewchar="柒"+tmpnewchar;break;case"8":tmpnewchar="捌"+tmpnewchar;break;case"9":tmpnewchar="玖"+tmpnewchar;break;}switch(part[0].length-i-1){case0:tmpnewchar=tmpnewchar+"元";break;case1:if(perchar!=0)tmpnewchar=tmpnewchar+"拾";break;case2:if(perchar!=0)tmpnewchar=tmpnewchar+"佰";break;case3:if(perchar!=0)tmpnewchar=tmpnewchar+"仟";break;case4:tmpnewchar=tmpnewchar+"万";break;case5:if(perchar!=0)tmpnewchar=tmpnewchar+"拾";break;case6:if(perchar!=0)tmpnewchar=tmpnewchar+"佰";break;case7:if(perchar!=0)tmpnewchar=tmpnewchar+"仟";break;case8:tmpnewchar=tmpnewchar+"亿";break;case9:tmpnewchar=tmpnewchar+"拾";break;}varnewchar=tmpnewchar+newchar;}//小数点之后进行转化if(Num.indexOf(".")!=-1){if(part[1].length>2){// alert("小数点之后只能保留两位,系统将自动截断");part[1]=part[1].substr(0,2)}for(i=0;i<part[1].length;i++){tmpnewchar=""perchar=part[1].charAt(i)switch(perchar){case"0":tmpnewchar="零"+tmpnewchar;break;case"1":tmpnewchar="壹"+tmpnewchar;break;case"2":tmpnewchar="贰"+tmpnewchar;break;case"3":tmpnewchar="叁"+tmpnewchar;break;case"4":tmpnewchar="肆"+tmpnewchar;break;case"5":tmpnewchar="伍"+tmpnewchar;break;case"6":tmpnewchar="陆"+tmpnewchar;break;case"7":tmpnewchar="柒"+tmpnewchar;break;case"8":tmpnewchar="捌"+tmpnewchar;break;case"9":tmpnewchar="玖"+tmpnewchar;break;}if(i==0)tmpnewchar=tmpnewchar+"角";if(i==1)tmpnewchar=tmpnewchar+"分";newchar=newchar+tmpnewchar;}}//替换所有无用汉字while(newchar.search("零零")!=-1)newchar=newchar.replace("零零","零");newchar=newchar.replace("零亿","亿");newchar=newchar.replace("亿万","亿");newchar=newchar.replace("零万","万");newchar=newchar.replace("零元","元");newchar=newchar.replace("零角","");newchar=newchar.replace("零分","");if(newchar.charAt(newchar.length-1)=="元"){newchar=newchar+"整"}returnnewchar;}
42.判断一个元素是否在数组中
exportconstcontains=(arr,val)=>{returnarr.indexOf(val)!=-1?true:false;}
43.数组排序,{type} 1:从小到大 2:从大到小 3:随机
exportconstsort=(arr,type=1)=>{returnarr.sort((a,b)=>{switch(type){case1:returna-b;case2:returnb-a;case3:returnMath.random()-0.5;default:returnarr;}})}
44.去重
exportconstunique=(arr)=>{if(Array.hasOwnProperty('from')){returnArray.from(newSet(arr));}else{varn={},r=[];for(vari=0;i<arr.length;i++){if(!n[arr[i]]){n[arr[i]]=true;r.push(arr[i]);}}returnr;}}
45.求两个集合的并集
exportconstunion=(a,b)=>{varnewArr=a.concat(b);returnthis.unique(newArr);}
46.求两个集合的交集
exportconstintersect=(a,b)=>{var_this=this;a=this.unique(a);returnthis.map(a,function(o){return_this.contains(b,o)?o:null;});}
47.删除其中一个元素
exportconstremove=(arr,ele)=>{varindex=arr.indexOf(ele);if(index>-1){arr.splice(index,1);}returnarr;}
48.将类数组转换为数组
``
export const formArray = (ary) => {
var arr = [];
if (Array.isArray(ary)) {
arr = ary;
} else {
arr = Array.prototype.slice.call(ary);
};
return arr;
}
49.最大值
export const max = (arr) => {
return Math.max.apply(null, arr);
}
50.最小值
export const min = (arr) => {
return Math.min.apply(null, arr);
}
51.求和
export const sum = (arr) => {
return arr.reduce((pre, cur) => {
return pre + cur
})
}
52.平均值
export const average = (arr) => {
return this.sum(arr) / arr.length
}
53.去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格
export const trim = (str, type) => {
type = type || 1
switch (type) {
case 1:
return str.replace(/\s+/g, "");
case 2:
return str.replace(/(^\s)|(\s
)/g, "");
default:
return str;
}
}
54.字符转换,type: 1:首字母大写 2:首字母小写 3:大小写转换 4:全部大写 5:全部小写
export const changeCase = (str, type) => {
type = type || 4
switch (type) {
case 1:
return str.replace(/\b\w+\b/g, function (word) {
return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
});case2:returnstr.replace(/\b\w+\b/g,function(word){returnword.substring(0,1).toLowerCase()+word.substring(1).toUpperCase();});case3:returnstr.split('').map(function(word){if(/[a-z]/.test(word)){returnword.toUpperCase();}else{returnword.toLowerCase()}}).join('')case4:returnstr.toUpperCase();case5:returnstr.toLowerCase();default:returnstr;}
}
55.检测密码强度
export const checkPwd = (str) => {
var Lv = 0;
if (str.length < 6) {
return Lv
}
if (/[0-9]/.test(str)) {
Lv++
}
if (/[a-z]/.test(str)) {
Lv++
}
if (/[A-Z]/.test(str)) {
Lv++
}
if (/[.|-|_]/.test(str)) {
Lv++
}
return Lv;
}
56.函数节流器
export const debouncer = (fn, time, interval = 200) => {
if (time - (window.debounceTimestamp || 0) > interval) {
fn && fn();
window.debounceTimestamp = time;
}
}
57.在字符串中插入新字符串
export const insertStr = (soure, index, newStr) => {
var str = soure.slice(0, index) + newStr + soure.slice(index);
return str;
}
58.判断两个对象是否键值相同
export const isObjectEqual = (a, b) => {
var aProps = Object.getOwnPropertyNames(a);
var bProps = Object.getOwnPropertyNames(b);
if(aProps.length!==bProps.length){returnfalse;}for(vari=0;i<aProps.length;i++){varpropName=aProps[i];if(a[propName]!==b[propName]){returnfalse;}}returntrue;
}
59.16进制颜色转RGBRGBA字符串
export const colorToRGB = (val, opa) => {
varpattern=/^(#?)[a-fA-F0-9]{6}$/;//16进制颜色值校验规则varisOpa=typeofopa=='number';//判断是否有设置不透明度if(!pattern.test(val)){//如果值不符合规则返回空字符return'';}varv=val.replace(/#/,'');//如果有#号先去除#号varrgbArr=[];varrgbStr='';for(vari=0;i<3;i++){varitem=v.substring(i*2,i*2+2);varnum=parseInt(item,16);rgbArr.push(num);}rgbStr=rgbArr.join();rgbStr='rgb'+(isOpa?'a':'')+'('+rgbStr+(isOpa?','+opa:'')+')';returnrgbStr;
}
60.追加url参数
export const appendQuery = (url, key, value) => {
var options = key;
if (typeof options == 'string') {
options = {};
options[key] = value;
}
options = $.param(options);
if (url.includes('?')) {
url += '&' + options
} else {
url += '?' + options
}
return url;
}