纪录下常用的工具函数

48 阅读1分钟

身份证校验

export const isCard = (card) => {
  // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
  let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  return reg.test(card)
}

将base64转换为文件对象

export const dataURLtoFile = (type, dataurl, fileName) => {
  const arr = `${type}${dataurl}`.split(",")
  const mime = arr[0].match(/:(.*?);/)[1]
  console.log(arr)
  const bstr = atob(arr[1])
  let n = bstr.length
  const u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  let blob = new File([u8arr], fileName, {
    type: mime,
  })
  return blob
}

手机号校验

export const checkPhone = (mobile) => {
 var phone = /^((\+|00)86)?1\d{10}$/
 return phone.test(mobile)
}

h5下载海报

export const convertImgToBase64 = (url, callback) => {
  let canvas = document.createElement("CANVAS")
  let ctx = canvas.getContext("2d")
  let img = new Image()
  img.crossOrigin = "Anonymous"
  img.src = `${url}?time=${Date.now()}`
  img.onload = function() {
    canvas.height = img.height
    canvas.width = img.width
    ctx.drawImage(img, 0, 0)
    var dataURL = canvas.toDataURL("image/png")
    callback.call(this, dataURL)
    canvas = null
  }
}
export const h5DownImg = (url) => {
  let arr = url.split("/")
  let file_name = arr[arr.length - 1].split(".")[0]
  convertImgToBase64(url, function(base64Img) {
    //转化后的base64
    const arr = base64Img.split(",")
    const mime = arr[0].match(/:(.*?);/)[1]
    const bstr = atob(arr[1])
    let n = bstr.length
    const u8arr = new Uint8Array(n)
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n)
    }
    let blob = new File([u8arr], file_name, {
      type: mime,
    })
    let downloadElement = document.createElement("a")
    downloadElement.download = file_name
    downloadElement.target = "_blank"
    downloadElement.href = URL.createObjectURL(blob)
    document.body.appendChild(downloadElement)
    downloadElement.click()
    document.body.removeChild(downloadElement)
    URL.revokeObjectURL(downloadElement.href)
  })
}

输入框数字限制

export const setInputValue = (options) => {
  console.log(options)
  const defaultOPtions = {
    max: Infinity,
    min: -Infinity,
    maxDecimals: Infinity,
  }
  options = Object.assign(defaultOPtions, options)
  let { max, min, maxDecimals, value } = options
  if (!value) return undefined
  if (value > max) return parseFloat(max)
  if (value < min) return parseFloat(min)
  if (maxDecimals == Infinity) return parseFloat(value)
  let arr = value.split(".")
  if (arr[1] && arr[1].length > maxDecimals) {
    return `${arr[0]}.${arr[1].substr(0, 2)}`
  }
  return value
}

文件对象转file

// file转base64
export const fileTobas64 = (file) => {
  return new Promise((resolve, reject) => {
    let reader = new FileReader()
    let fileResult = ""
    reader.readAsDataURL(file)
    //开始转
    reader.onload = function () {
      fileResult = reader.result
    }
    //转 失败
    reader.onerror = function (error) {
      reject(error)
    }
    //转 结束  咱就 resolve 出去
    reader.onloadend = function () {
      resolve(fileResult)
    }
  })
}