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.是否數(shù)字
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.是否函數(shù)
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.是否數(shù)組
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函數(shù)
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參數(shù)
exportconstgetQueryString=(name)=>{constreg=newRegExp('(^|&)'+name+'=([^&]*)(&|$)','i');constsearch=window.location.search.split('?')[1]||'';constr=search.match(reg)||[];returnr[2];}
27.動態(tài)引入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.根據(jù)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之間,只能包含字母、數(shù)字和下劃線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'://金額(小數(shù)點2位)return/^\d*(?:\.\d{0,2})?$/.test(str);case'URL'://網(wǎng)址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'://數(shù)字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('你的身份證地區(qū)非法')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.隨機數(shù)范圍
exportconstrandom=(min,max)=>{if(arguments.length===2){returnMath.floor(min+Math.random()*((max+1)-min))}else{returnnull;}}
40.將阿拉伯數(shù)字翻譯成中文的大寫數(shù)字
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)// 加上小數(shù)部分(如果有小數(shù)部分){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.將數(shù)字轉換為大寫金額
exportconstchangeToChinese=(Num)=>{//判斷如果傳遞進來的不是字符的話轉換為字符if(typeof Num=="number"){Num=newString(Num);};Num=Num.replace(/,/g,"")//替換tomoney()中的“,”Num=Num.replace(//g,"")//替換tomoney()中的空格Num=Num.replace(/¥/g,"")//替換掉可能出現(xiàn)的¥字符if(isNaN(Num)){//驗證輸入的字符是否為數(shù)字//alert("請檢查小寫金額是否正確");return"";};//字符處理完畢后開始轉換,采用前后兩部分分別轉換varpart=String(Num).split(".");varnewchar="";//小數(shù)點前進行轉化for(vari=part[0].length-1;i>=0;i--){if(part[0].length>10){return"";//若數(shù)量超過拾億單位,提示}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;}//小數(shù)點之后進行轉化if(Num.indexOf(".")!=-1){if(part[1].length>2){// alert("小數(shù)點之后只能保留兩位,系統(tǒng)將自動截斷");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.判斷一個元素是否在數(shù)組中
exportconstcontains=(arr,val)=>{returnarr.indexOf(val)!=-1?true:false;}
43.數(shù)組排序,{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.將類數(shù)組轉換為數(shù)組
``
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.函數(shù)節(jié)流器
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進制顏色值校驗規(guī)則varisOpa=typeofopa=='number';//判斷是否有設置不透明度if(!pattern.test(val)){//如果值不符合規(guī)則返回空字符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參數(shù)
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;
}