项目中常用的个人js工具库,有需要的拿走

  1. 解决线上部署后,本地图片不显示的问题

  2. 字符串相加

  3. 验证手机号码是否合法

  4. 密码强度校验

  5. 用户名校验

  6. 邮箱验证

  7. 判断变量是否为空

  8. 防抖

  9. 深拷贝

  10. 文件转base64格式

//@ts-nocheck

/**
 * 解决线上部署后,本地图片不显示的问题
 * @param url
 */
export function xxzUtilsGetAssetsFile(url: any) {
  return new URL(`../assets/images/${url}`, import.meta.url).href
}

/**
 * 字符串相加
 * @param num1
 * @param num2
 */
export function xxzUtilsAddStrings(num1: string, num2: string) {
  let i = num1.length - 1,//两个指针分别指向两个数的尾部
    j = num2.length - 1,
    carry = 0,//进位
    ans = []
  while (i >= 0 || j >= 0 || carry !== 0) {//判断指针是否到头
    let c1 = i >= 0 ? num1.charAt(i) - '0' : 0,//没到头就转换成数字,到头就赋值为0
      c2 = j >= 0 ? num2.charAt(j) - '0' : 0
    let sum = c1 + c2 + carry
    ans.unshift(sum % 10)//取余数,从队头放入res
    carry = Math.floor(sum / 10)//重新设置进位
    i--
    j--
  }
  return ans.join('')//将数组连接成字符串
}

/**
 * 验证手机号码是否合法
 * 验证规则:11位数字,以1开头。
 * 第二位不能是二,不能是0[3456789]
 */
export function xxzUtilsPhoneValidator(str: string): boolean {
  const reg = /^1[3456789]\d{9}$/
  // ^1  以1开头
  // [3456789] 第2位,使用原子表里的任意一个原子都可以
  // \d{9}$  第三位  朝后可以是任意数字  并且最后结尾必须是数字
  return reg.test(str)
}


/**
 * 密码强度校验
 * 8到16 英文大小写字母 , 数字,特殊符号组成
 */
export function xxzUtilsPassValidator(val: string): boolean {
  const validator = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[.$@$!%*#?&])[^]{8,16}$/
  return validator.test(val)
}

/**
 * 用户名校验
 * 由4-32位字母、数字、"_"和"-"组成
 */
export function xxzUtilsUsernameValidator(val: string): boolean {
  const regex = /^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[_-]).{4,32}$/
  return regex.test(val)
}

/**
 * 邮箱验证
 */
export function xxzUtilsEmailValidator(email) {
  const re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,6}$/
  return re.test(email)
}


/**
 * 判断变量是否为空
 * @param value
 */
export function xxzUtilsIsEmpty(value: any): boolean {
  if (value === undefined || value === null) {
    return true
  }
  if (typeof value === 'string' && value.trim() === '') {
    return true
  }
  if (Array.isArray(value) && value.length === 0) {
    return true
  }
  if (typeof value === 'object' && Object.keys(value).length === 0) {
    return true
  }
  return false
}

/**
 * 防抖
 */
type CallbackFn = (item?: any) => void

let timer: any = null

export function xxzUtilsDebounce(Callback: CallbackFn, delay = 200) {
  timer != null ? clearTimeout(timer) : null
  timer = setTimeout(() => {
    Callback && Callback() //当有值才会执行
  }, delay)
}


/**
 * 深拷贝
 */
export function xxzUtilsCloneDeep(source, hash = new WeakMap()) {
  if (typeof source !== 'object' || source === null) {
    return source
  }
  if (hash.has(source)) {
    return hash.get(source)
  }
  const target = Array.isArray(source) ? [] : {}
  Reflect.ownKeys(source).forEach(key => {
    const val = source[key]
    if (typeof val === 'object' && val !== null) {
      target[key] = xxzUtilsCloneDeep(val, hash)
    } else {
      target[key] = val
    }
  })
  hash.set(source, target)
  return target
}


interface ConfigFile {
  readonly lastModified: number;
  readonly name: string;
  readonly size: number;
  readonly type: string;

  arrayBuffer(): Promise<ArrayBuffer>;

  slice(start?: number, end?: number, contentType?: string): Blob;

  stream(): ReadableStream;

  text(): Promise<string>;
}

/**
 * 文件转base64格式
 * @param file 文件类型
 */
export function xxzUtilsFileToBase64(file: ConfigFile) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsDataURL(file) // 一定要传入file格式
    reader.onload = () => {
      // console.log('file转base64结果:' + reader.result)
      resolve(reader.result as any)
    }
    reader.onerror = function(error) {
      // console.log('Error: ', error)
      reject(error)
    }
  })
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值