前端 JS 通用工具类
1.判断类型集合
export const checkStr = ( 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' :
return / ^[a-zA-Z]\w{5,17}$ / . test ( str)
case 'postal' :
return / [1-9]\d{5}(?!\d) / . test ( str) ;
case 'QQ' :
return / ^[1-9][0-9]{4,9}$ / . test ( str) ;
case 'email' :
return / ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ / . test ( str) ;
case 'money' :
return / ^\d*(?:\.\d{0,2})?$ / . test ( str) ;
case 'URL' :
return / (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? / . test ( str)
case 'IP' :
return / ((?:(?: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 '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' :
return / <("[^"]*"|'[^']*'|[^'">])*> / . test ( str) ;
default :
return true ;
}
}
2.格式化时间,通用
function formatDigit ( n ) {
return n. toString ( ) . replace ( / ^(\d)$ / , '0$1' ) ;
}
export const formatDate = ( timestamp, formats ) => {
formats = formats || 'Y-M-D' ;
var myDate = undefined ;
if ( timestamp) {
if ( typeof ( timestamp) != 'string' ) {
myDate = new Date ( timestamp * 1000 ) ;
} else {
myDate = new Date ( timestamp) ;
}
} else {
myDate = new Date ( ) ;
}
var year = myDate. getFullYear ( ) ;
var month = formatDigit ( myDate. getMonth ( ) + 1 ) ;
var day = formatDigit ( myDate. getDate ( ) ) ;
var hour = formatDigit ( myDate. getHours ( ) ) ;
var minute = formatDigit ( myDate. getMinutes ( ) ) ;
var second = formatDigit ( myDate. getSeconds ( ) ) ;
return formats. replace ( / Y|M|D|h|m|s / g , ( matches ) => {
return {
Y : year,
M : month,
D : day,
h : hour,
m : minute,
s : second
} [ matches] ;
} ) ;
}
3.验证邮箱
export const isEmail = ( s ) => {
return / ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$ / . test ( s)
}
4.验证手机号码
export const isMobile = ( s ) => {
return / ^1[0-9]{10}$ / . test ( s)
}
5.验证电话号码
export const isPhone = ( s ) => {
return / ^([0-9]{3,4}-)?[0-9]{7,8}$ / . test ( s)
}
6.验证是否url地址
export const isURL = ( s ) => {
return / ^http[s]?:\/\/.* / . test ( s)
}
7.验证是否字符串
export const isString = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'String'
}
8.验证是否是否数字
export const isNumber = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'Number'
}
9.验证是否是Boolean
export const isBoolean = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'Boolean'
}
10.验证是否是函数
export const isFunction = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'Function'
}
11.是否为null
export const isNull = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'Null'
}
12.是否undefined
export const isUndefined = ( o ) => {
return Object . prototype. toString . call ( o) . slice ( 8 , - 1 ) === 'Undefined'
}
13.字符串超出多少字显示省略号
export function strOut ( str, len= 0 , type ) {
type= type|| 'star' ;
var restr = '' ;
if ( str) {
if ( str. length >= len) {
restr = str. substring ( 0 , len) + ( type== 'star' ? '***' : '...' ) ;
} else {
restr = str;
}
}
return restr;
}
14.随机数时间戳 (返回数字符串)
export function uniqueId ( ) {
var a = Math. random,
b = parseInt;
return Number ( new Date ( ) ) . toString ( ) + b ( 10 * a ( ) ) + b ( 10 * a ( ) ) + b ( 10 * a ( ) ) ;
}
15.数组随机洗牌算法
export const shuffle = ( arr ) => {
var result = [ ] ,
random;
while ( arr. length > 0 ) {
random = Math. floor ( Math. random ( ) * arr. length) ;
result. push ( arr[ random] )
arr. splice ( random, 1 )
}
return result;
}
16.严格的身份证号码校验
export const isCardID = ( sId ) => {
if ( ! / (^\d{15}$)|(^\d{17}(\d|X|x)$) / . test ( sId) ) {
console. log ( '你输入的身份证长度或格式错误' )
return false
}
var aCity = {
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 ( '你的身份证地区非法' )
return false
}
var sBirthday = ( sId. substr ( 6 , 4 ) + "-" + Number ( sId. substr ( 10 , 2 ) ) + "-" + Number ( sId. substr ( 12 , 2 ) ) ) . replace ( / - / g ,
"/" ) ,
d = new Date ( sBirthday)
if ( sBirthday != ( d. getFullYear ( ) + "/" + ( d. getMonth ( ) + 1 ) + "/" + d. getDate ( ) ) ) {
console. log ( '身份证上的出生日期非法' )
return false
}
var sum = 0 ,
weights = [ 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 ] ,
codes = "10X98765432"
for ( var i = 0 ; i < sId. length - 1 ; i++ ) {
sum += sId[ i] * weights[ i] ;
}
var last = codes[ sum % 11 ] ;
if ( sId[ sId. length - 1 ] != last) {
console. log ( '你输入的身份证号非法' )
return false
}
return true
}
17.传入身份证获取信息
export const IdCard = ( IdCard, type ) => {
if ( type === 1 ) {
var birthday = IdCard. substring ( 6 , 10 ) + "/" + IdCard. substring ( 10 , 12 ) + "/" + IdCard. substring ( 12 , 14 )
return birthday
}
if ( type === 2 ) {
if ( parseInt ( IdCard. substr ( 16 , 1 ) ) % 2 == 1 ) {
return "1"
} else {
return "2"
}
}
if ( type === 3 ) {
var ageDate = new Date ( )
var month = ageDate. getMonth ( ) + 1
var day = ageDate. getDate ( )
var age = ageDate. getFullYear ( ) - IdCard. substring ( 6 , 10 ) - 1
if ( IdCard. substring ( 10 , 12 ) < month || IdCard. substring ( 10 , 12 ) == month && IdCard. substring ( 12 , 14 ) <= day) {
age++
}
if ( age <= 0 ) {
age = 1
}
return age
}
}
18.随机整数范围
export const random = ( min, max ) => {
if ( arguments. length === 2 ) {
return Math. floor ( min + Math. random ( ) * ( ( max + 1 ) - min) )
} else {
return null ;
}
}
19.将阿拉伯数字翻译成中文的大写数字
export const numberToChinese = ( num ) => {
var AA = new Array ( "零" , "一" , "二" , "三" , "四" , "五" , "六" , "七" , "八" , "九" , "十" ) ;
var BB = new Array ( "" , "十" , "百" , "仟" , "萬" , "億" , "点" , "" ) ;
var a = ( "" + num) . replace ( / (^0*) / g , "" ) . split ( "." ) ,
k = 0 ,
re = "" ;
for ( var i = a[ 0 ] . length - 1 ; i >= 0 ; i-- ) {
switch ( k) {
case 0 :
re = BB [ 7 ] + re;
break ;
case 4 :
if ( ! new RegExp ( "0{4}//d{" + ( a[ 0 ] . length - i - 1 ) + "}$" )
. test ( a[ 0 ] ) )
re = BB [ 4 ] + re;
break ;
case 8 :
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 ( var i = 0 ; i < a[ 1 ] . length; i++ )
re += AA [ a[ 1 ] . charAt ( i) ] ;
}
if ( re == '一十' )
re = "十" ;
if ( re. match ( / ^一 / ) && re. length == 3 )
re = re. replace ( "一" , "" ) ;
return re;
}
20.将数字转换为大写金额
export const changeToChinese = ( Num ) => {
if ( typeof Num == "number" ) {
Num = new String ( Num) ;
} ;
Num = Num. replace ( / , / g , "" )
Num = Num. replace ( / / g , "" )
Num = Num. replace ( / ¥ / g , "" )
if ( isNaN ( Num) ) {
return "" ;
} ;
var part = String ( Num) . split ( "." ) ;
var newchar = "" ;
for ( var i = part[ 0 ] . length - 1 ; i >= 0 ; i-- ) {
if ( part[ 0 ] . length > 10 ) {
return "" ;
}
var tmpnewchar = ""
var perchar = 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 ) {
case 0 :
tmpnewchar = tmpnewchar + "元" ;
break ;
case 1 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "拾" ;
break ;
case 2 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "佰" ;
break ;
case 3 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "仟" ;
break ;
case 4 :
tmpnewchar = tmpnewchar + "万" ;
break ;
case 5 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "拾" ;
break ;
case 6 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "佰" ;
break ;
case 7 :
if ( perchar != 0 ) tmpnewchar = tmpnewchar + "仟" ;
break ;
case 8 :
tmpnewchar = tmpnewchar + "亿" ;
break ;
case 9 :
tmpnewchar = tmpnewchar + "拾" ;
break ;
}
var newchar = tmpnewchar + newchar;
}
if ( Num. indexOf ( "." ) != - 1 ) {
if ( part[ 1 ] . length > 2 ) {
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 + "整"
}
return newchar;
}
21.数组合并,目前合并一维
export const arrConcat = ( arrOne, arrTwo ) => {
return [ ... arrOne, ... arrTwo]
}
22.判断一个元素是否在数组中
export const arrContains = ( arr, val ) => {
return arr. indexOf ( val) != - 1 ? true : false ;
}
23.数组去重
export const unique = ( arr ) => {
if ( Array. hasOwnProperty ( 'from' ) ) {
return Array. from ( new Set ( arr) ) ;
} else {
var n = { } ,
r = [ ] ;
for ( var i = 0 ; i < arr. length; i++ ) {
if ( ! n[ arr[ i] ] ) {
n[ arr[ i] ] = true ;
r. push ( arr[ i] ) ;
}
}
return r;
}
}
24.数组删除其中一个元素
export const arrRemove = ( arr, ele ) => {
var index = arr. indexOf ( ele) ;
if ( index > - 1 ) {
arr. splice ( index, 1 ) ;
}
return arr;
}
25.求数组中的最大值
export const arrMax = ( arr ) => {
return Math. max . apply ( null , arr) ;
}
26.求数组中的最小值
export const arrMin = ( arr ) => {
return Math. min . apply ( null , arr) ;
}
27.数组中的值求和
export const arrSum = ( arr ) => {
return arr. reduce ( ( pre, cur ) => {
return pre + cur
} )
}
28.去除空格
export const strTrim = ( str, type ) => {
type = type || 2
switch ( type) {
case 1 :
return str. replace ( / \s+ / g , "" ) ;
case 2 :
return str. replace ( / (^\s*)|(\s*$) / g , "" ) ;
case 3 :
return str. replace ( / (^\s*) / g , "" ) ;
case 4 :
return str. replace ( / (\s*$) / g , "" ) ;
default :
return str;
}
}
29.字符转换
export const changeCase = ( str, type ) => {
type = type || 4
switch ( type) {
case 1 :
return str. replace ( / \b\w+\b / g , ( word ) => {
return word. substring ( 0 , 1 ) . toUpperCase ( ) + word. substring ( 1 ) . toLowerCase ( ) ;
} ) ;
case 2 :
return str. replace ( / \b\w+\b / g , ( word ) => {
return word. substring ( 0 , 1 ) . toLowerCase ( ) + word. substring ( 1 ) . toUpperCase ( ) ;
} ) ;
case 3 :
return str. split ( '' ) . map ( ( word ) => {
if ( / [a-z] / . test ( word) ) {
return word. toUpperCase ( ) ;
} else {
return word. toLowerCase ( )
}
} ) . join ( '' )
case 4 :
return str. toUpperCase ( ) ;
case 5 :
return str. toLowerCase ( ) ;
default :
return str;
}
}
30.检测密码强度
export const checkPwd = ( str ) => {
var Lv = 1 ;
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;
31.在字符串中插入新字符串
export const insertStr = ( soure, index, newStr ) => {
var str = soure. slice ( 0 , index) + newStr + soure. slice ( index) ;
return str;
}
32.16进制颜色值转RGBA字符串
export const colorToRGB = ( val, opa ) => {
var pattern = / ^(#?)[a-fA-F0-9]{6}$ / ;
var isOpa = typeof opa == 'number' ;
if ( ! pattern. test ( val) ) {
return '' ;
}
var v = val. replace ( / # / , '' ) ;
var rgbArr = [ ] ;
var rgbStr = '' ;
for ( var i = 0 ; i < 3 ; i++ ) {
var item = v. substring ( i * 2 , i * 2 + 2 ) ;
var num = parseInt ( item, 16 ) ;
rgbArr. push ( num) ;
}
rgbStr = rgbArr. join ( ) ;
rgbStr = 'rgb' + ( isOpa ? 'a' : '' ) + '(' + rgbStr + ( isOpa ? ',' + opa : '' ) + ')' ;
return rgbStr;
}
33.浮点型相加
export const floatingPointAddition = ( arg1, arg2 ) => {
var r1, r2, m, n;
try {
r1 = arg1. toString ( ) . split ( "." ) [ 1 ] . length
} catch ( error) {
r1 = 0
}
try {
r2 = arg2. toString ( ) . split ( "." ) [ 1 ] . length
} catch ( error) {
r2 = 0
}
m = Math. pow ( 10 , Math. max ( r1, r2) ) ;
n = ( r1 >= r2) ? r1 : r2;
return ( ( arg1 * m + arg2 * m) / m) . toFixed ( n) ;
}
34.格式化用户名显示
export const name = ( name ) => {
if ( isUndefined ( name) && isNull ( name) ) {
return "" ;
}
var res = "" ;
if ( name. length == 1 ) {
res += name;
}
if ( name. length == 2 ) {
res += "*" ;
res += name. substring ( name. length - 1 ) ;
}
if ( name. length == 3 ) {
res += name. substring ( 0 , 1 ) ;
res += "*" ;
res += name. substring ( 2 ) ;
}
if ( name. length > 3 ) {
res += name. substring ( 0 , 1 ) ;
for ( let i= 0 ; i< name. length - 2 ; i++ ) {
if ( i <= 4 ) {
res += "*" ;
} else {
break ;
}
}
res += name. substring ( name. length - 1 , name. length) ;
}
return res;
}
35.滚动到顶部
export const scrollToTop = ( ) => {
const c = document. documentElement. scrollTop || document. body. scrollTop;
if ( c > 0 ) {
window. requestAnimationFrame ( scrollToTop) ;
window. scrollTo ( 0 , c - c / 8 ) ;
}
}
36.图片压缩递归
export function imageCompress ( file ) {
return new Promise ( ( resolve, reject ) => {
let { size, path } = file
let type = path. split ( "." ) [ 1 ]
if ( size< ( 1024 * 1024 ) ) {
resolve ( file)
return false
}
uni. compressImage ( {
src : path,
quality : 80 ,
success : res => {
let newPath = res. tempFilePath+ type
let newName = res. tempFilePath. split ( "/" ) [ res. tempFilePath. split ( "/" ) . length- 1 ] + type
uni. getFileInfo ( {
filePath : res. tempFilePath,
success : async ( info ) => {
let newFile = { ... file, size : info. size, path : newPath, name : newName, tempFilePath : res. tempFilePath}
resolve ( await imageCompress ( newFile) )
}
} )
}
} )
} )
}