前端框架中常见的公共方法汇总(四):登录正则+url参数+弹窗自适应+经纬度转换

183 阅读1分钟

此篇文章仅作为方便项目或实际使用中复用而记录

格式化时间

export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
      time = parseInt(time)
    }
    if (typeof time === 'number' && time.toString().length === 10) {
      time = time * 1000
    }
    date = new Date(time)
  }
  if (!date) return '-'
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') {
      return ['日', '一', '二', '三', '四', '五', '六'][value]
    }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return timeStr
}

格式化url查询参数

export function getQueryParameters(url) {
  const search = url.split('?')[1]
  if (!search) {
    return {}
  }
  return JSON.parse(
    '{"' +
      decodeURIComponent(search)
        .replace(/"/g, '\\"')
        .replace(/\?/g, '","')
        .replace(/&/g, '","')
        .replace(/=/g, '":"')
        .replace(/\+/g, ' ') +
      '"}'
  )
}

删除url查询参数

export function removeQueryParameters(str, name) {
  var reg = new RegExp(name + '=([^&]*)(&?)', 'i')
  var r = str.match(reg)
  if (r != null) {
    str = str.replace(reg, '')
    // console.log(str)
    // alert()
  }
  return str
}

根据宽、高(或百分比),获取弹出框的x、 y 、w 、h

export function getOffsetAndSize(W = 0.6, H = 0.8) {
  const clientWidth = document.body.clientWidth
  const clientHeight = document.body.clientHeight

  const dialogW = W <= 1 ? parseInt(clientWidth * W) : W
  const dialogH = H <= 1 ? parseInt(clientHeight * H) : H
  const left = parseInt((clientWidth - dialogW) / 2)
  const top = parseInt((clientHeight - dialogH) / 2)

  return [left, top, dialogW, dialogH]
}

将度分秒转为经纬度

// 示例:度分秒 104°4′18″
// Dms2D('104°4′18″') => 104.07167
export const Dms2D = dmsData => {
  if (!dmsData.includes('°') || !dmsData.includes('′') || !dmsData.includes('″')) return 0
  const d = parseFloat(dmsData.split('°')[0])
  const m = parseFloat(dmsData.split('°')[1].split('′')[0])
  const s = parseFloat(dmsData.split('′')[1].replace('″', ''))
  return d + m / 60 + s / 60 / 60
}

将度分秒转为经纬度

// 示例:Dms2D(104, 4, 18) => 104.07167
export const Dms2D2 = (d, m, s) => {
  return d + m / 60 + s / 60 / 60
}

手机号验证

 isvalidPhone(str) {
      const reg = /^1[3|4|5|7|8][0-9]\d{8}$/
      return reg.test(str)
    },

验证用户名 用户名要求 数字、字母、下划线的组合,其中数字和字母必须同时存在*

  isvalidUsername(str) {
      const reg = /^(?![^A-Za-z]+$)(?![^0-9]+$)[0-9A-Za-z_]{4,15}$/
      return reg.test(str)
    },

验证密码 密码,以字母开头,长度在8~18之间,只能包含字母、数字和下划线

   isvalidPass(str) {
      const reg = /^(?:\d+|[a-zA-Z]){3,18}$/
      return reg.test(str)
    }