validate.js

// 手机号
export const mobileReg = /^1[3456789]\d{9}$/
// 数字
export const numberReg = /^[0-9]+$/
// 数字和字母
export const wordAndNumberReg = /^[0-9a-zA-Z]+$/
// 数字和字母 加 -
export const wordAndNumberAndCrossBarReg = /^[0-9a-zA-Z\\-]+$/
// 数字和中文
export const NumberZhReg = /^[\u4E00-\u9FA50-9]+$/
// 数字,字母和中文
export const wordAndNumberZhReg = /^[\u4E00-\u9FA5A-Za-z0-9]+$/
// 数字,字母和中文 加 -
export const wordAndNumberAndZhAndCrossBarReg = /^[\u4E00-\u9FA5A-Za-z0-9\\-]+$/
// 数字,字母和字符(特殊字符与后端约定~*!@#$%()()-_{}|:&??)
export const wordAndNumberSymbolReg = /^[a-z0-9A-Z~*!@#$%()()\-_{}|:&??]+$/
// 中文
export const zhReg = /^[\u4e00-\u9fa5]+$/
// 非中文
export const unZhReg = /^((?![\u4e00-\u9fa5]).)*$/
// 正整数
export const positiveIntegerTReg = /^\+?[1-9]\d*$/
// 非负整数
export const positiveIntegerOrZeroTReg = /^\+?[0-9]\d*$/
// 六位数字
export const sixDigits = /^\d{6}$/
// 六位正整数
export const sixPositiveIntegers = /^[1-9][0-9]{0,5}$/
// 三位正整数
export const threePositiveIntegers = /^[1-9][0-9]{0,2}$/
// 车牌号
export const licensePlate =
  /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z]{0,1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/

/**
 * @param {string} url
 * @returns {Boolean}
 */
export function validURL(url) {
  const reg =
    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
  const reg =
    // eslint-disable-next-line no-useless-escape
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(email)
}

// 表单自定义校验函数,用于校验最大数和最小数
export function validateMaxMinNumber({ max, min = 1, errMessage }) {
  return (rule, value, callback) => {
    value = Number(value)
    if (value < min || value > max) {
      rule.message = errMessage || `录入数字范围为${min}-${max}`
      callback(new Error(rule.message))
    } else {
      callback()
    }
  }
}

// 表单自定义校验函数,用于校验小数 name:要校验字段的汉语名称 decimalsLen:保留多少位小数
export function validateNumber(name, decimalsLen) {
  return (rule, value, callback) => {
    if (value === '' || value === null || value === undefined) {
      callback()
      return
    }
    // toString() 是因为编辑时,表单回显为number类型时  字段无slice()方法  导致报错
    if (value.toString().slice(-1) === '.') {
      rule.message = `仅支持带有${decimalsLen}位小数的数字`
      callback(rule.message)
      return
    }
    // 校验 保留多少位小数
    const idx = value.toString().lastIndexOf('.')
    if (idx !== -1) {
      const l = value.toString().substr(value.toString().lastIndexOf('.') + 1).length
      if (l > decimalsLen) {
        rule.message = `最多保留${decimalsLen}位小数`
        callback(rule.message)
        return
      }
    }
    value = Number(value)
    if (!/^\d+$|^\d*\.\d+$/.test(value)) {
      rule.message = `${name}为数值类型`
      callback(rule.message)
      return
    }
    if (value <= 0) {
      rule.message = `${name}必须大于0`
      callback(rule.message)
      return
    }
    if (value > 9999) {
      rule.message = `${name}不能大于9999`
      callback(rule.message)
      return
    }
    callback()
  }
}
posted @ 2022-01-07 17:03  一个爱好城建的程序猿  阅读(219)  评论(0)    收藏  举报