vue项目常用表单验证和部分工具函数

/**
 * 手机号验证
 * @param {*} mobile
 */
export function isMobile(mobile) {
  if (!mobile) {
    utils.toast('请输入手机号码')
    return false
  }
  if (!mobile.match(/^1[3-9][0-9]\d{8}$/)) {
    utils.toast('手机号不正确')
    return false
  }
  return true
}

/**
 * 判断输入值是否为数字
 * @param {*} value
 */
export function isNumber(value) {
  if (typeof Number(value) === 'number' && !isNaN(value)) {
    return true
  } else {
    return false
  }
}

/**
 * 判断字符串是否为空
 * @param {*} str
 */
export function isEmpty(str) {
  if (str === '' || str === undefined || str === null) {
    return true
  } else {
    return false
  }
}

/**
 * 日期格式化
 * @param {*} formatStr
 * @param {*} fdate
 */
export function formatDate(formatStr, fdate) {
  if (fdate) {
    if (~fdate.indexOf('.')) {
      fdate = fdate.substring(0, fdate.indexOf('.'))
    }
    fdate = fdate
      .toString()
      .replace('T', ' ')
      .replace(/\-/g, '/')
    var fTime,
      fStr = 'ymdhis'
    if (!formatStr) formatStr = 'y-m-d h:i:s'
    if (fdate) fTime = new Date(fdate)
    else fTime = new Date()
    var month = fTime.getMonth() + 1
    var day = fTime.getDate()
    var hours = fTime.getHours()
    var minu = fTime.getMinutes()
    var second = fTime.getSeconds()
    month = month < 10 ? '0' + month : month
    day = day < 10 ? '0' + day : day
    hours = hours < 10 ? '0' + hours : hours
    minu = minu < 10 ? '0' + minu : minu
    second = second < 10 ? '0' + second : second
    var formatArr = [
      fTime.getFullYear().toString(),
      month.toString(),
      day.toString(),
      hours.toString(),
      minu.toString(),
      second.toString()
    ]
    for (var i = 0; i < formatArr.length; i++) {
      formatStr = formatStr.replace(fStr.charAt(i), formatArr[i])
    }
    return formatStr
  } else {
    return ''
  }
}

/**
 * 金额格式化
 * @param {*} money
 */
export function rmoney(money) {
  return parseFloat(money)
    .toFixed(2)
    .toString()
    .split('')
    .reverse()
    .join('')
    .replace(/(\d{3})/g, '$1,')
    .replace(/\,$/, '')
    .split('')
    .reverse()
    .join('')
}

/**
 * 格式化手机号码
 * @param {*} num
 */
export function formatNumber(num) {
  return num.length === 11 ? num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2') : num
}

/**
 * 内容替换
 * @param {*} text 目标字符串
 * @param {*} repstr 想替换的字符串
 * @param {*} newstr 替换为新的字符串
 * eg:
 *  var str1 = "abigbbigcbigd";
 *  var str2 = replaceAllStr(str1, "big", "G");
 *  结果:aGbGcGd
 */
export function replaceAll(text, repstr, newstr) {
  return text.replace(new RegExp(repstr, 'gm'), newstr)
}

/**
 * 清除空格
 * @param {*} value
 */
export function trim(value) {
  return value.replace(/(^\s*)|(\s*$)/g, '')
}

/**
 * 判断是否是数组
 * @param {*} val
 */
export function isArray(val) {
  return toString.call(val) === '[object Array]'
}

/**
 * 判断是否是对象
 * @param {*} val
 */
export function isObject(val) {
  return val !== null && typeof val === 'object'
}

/**
 * 判断是否是函数
 * @param {*} val
 */
export function isFunction(val) {
  return Object.prototype.toString.call(val) === '[object Function]'
}

/**
 * 根据url地址下载
 * @param {*} url
 */
export function download(url) {
  var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1
  var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1
  if (isChrome || isSafari) {
    var link = document.createElement('a')
    link.href = url
    if (link.download !== undefined) {
      var fileName = url.substring(url.lastIndexOf('/') + 1, url.length)
      link.download = fileName
    }
    if (document.createEvent) {
      var e = document.createEvent('MouseEvents')
      e.initEvent('click', true, true)
      link.dispatchEvent(e)
      return true
    }
  }
  if (url.indexOf('?') === -1) {
    url += '?download'
  }
  window.open(url, '_self')
  return true
}

/**
 * 获取滚动的坐标
 * @param {*} el
 */
export const getScrollPosition = (el = window) => ({
  x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
  y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
})

/**
 * 滚动到顶部
 */
export const scrollToTop = () => {
  const c = document.documentElement.scrollTop || document.body.scrollTop
  if (c > 0) {
    window.requestAnimationFrame(scrollToTop)
    window.scrollTo(0, c - c / 8)
  }
}

/**
 * 判断输入的格式是否正确
 * @param {*} str   输入内容
 * @param {*} type   类型
 */
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': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
      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': //金额(小数点2位)
      return /^\d*(?:\.\d{0,2})?$/.test(str)
    case 'URL': //网址
      return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
    case 'IP': //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 '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': //HTML标记
      return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str)
    default:
      return true
  }
}

/**
 * 验证身份证号码
 * @param {*} sId
 */
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
}

/**
 * 将阿拉伯数字翻译成对应的中文数字
 * @param {*} num
 */
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
}

/**
 * 数组去重
 * @param {*} arr
 */
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
  }
}

/**
 * 求两个数组的并集
 * @param {*} a
 * @param {*} b
 */
export const union = (a, b) => {
  var newArr = a.concat(b)
  return unique(newArr)
}

/**
 * 求两个数组的交集
 * @param {*} a
 * @param {*} b
 */
export const intersect = (a, b) => {
  var _this = this
  a = this.unique(a)
  return this.map(a, function(o) {
    return _this.contains(b, o) ? o : null
  })
}

/**
 * 检测密码强度
 * @param {*} str
 */
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
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值