前端校验

/* eslint-disable eol-last */
/**
 * Created by jiachenpan on 16/11/18.
 */
export function deviceNo (rule, value, callback) {
  let reg = /^[\da-zA-Z_-]{1,64}$/
  if (!reg.test(value)) {
    callback(new Error())
  } else {
    callback()
  }
}
export const clickoutside = {
  bind (el, binding, vnode) {
    function documentHandler (e) {
      if (el.contains(e.target)) {
        return false
      }
      if (binding.expression) {
        binding.value(e)
      }
    }
    el.__vueClickOutside__ = documentHandler
    document.addEventListener('click', documentHandler)
  },
  update () { },
  unbind (el, binding) {
    document.removeEventListener('click', el.__vueClickOutside__)
    delete el.__vueClickOutside__
  }
}

export function warranty (rule, value, callback) {
  let reg = /^\d{0,255}$/
  if (!reg.test(value)) {
    callback(new Error())
  } else {
    callback()
  }
}

export function price (rule, value, callback) {
  const reg = /^(([1-9]\d{0,7})|(0?))(\.\d)?$/
  if (!reg.test(value)) {
    callback(new Error())
  } else {
    callback()
  }
}

export function dataTimrangeValidate (rule, value, callback) {
  if (JSON.stringify(value) === '["",""]') {
    return callback(new Error('请选择课程时间'))
  } else {
    callback()
  }
}
export function textValidate (rule, value, callback) {
  const afterTrimValue = value.trim()
  if (afterTrimValue.length === 0) {
    return callback(new Error('不能全是空格'))
  } else if (value.length !== afterTrimValue.length) {
    return callback(new Error('开头和结尾不能为空格'))
  } else {
    callback()
  }
}
export function isRiskPwd (rule, value, callback) {
  var count = 0
  var reg = [/\W+/, /[a-z]+/, /[A-Z]+/, /[0-9]+/]
  if (value.length >= 8) {
    for (var r = 0; r < reg.length; r++) {
      if (reg[r].test(value)) {
        count++
      }
    }
  }
  return count > 1
}

export function validateEventLinkageConfigNameLength (rule, value, callback) {
  if (value.trim().length === 0) {
    callback(new Error('请输入规则名称,不超过32个字符'))
  } else {
    callback()
  }
}

export function validateEventLinkageOnlineRate (rule, value, callback) {
  if (Number(value) && value > 0 && value < 100 && (String(value).split('.').length === 1 || (String(value).split('.').length === 2 && String(value).split('.')[1].length < 3))) {
    callback()
  } else {
    callback(new Error('请输入数字,在0-100之间,且最多保留两位小数'))
  }
}
// 汉字
export function validateEventChactor (rule, value, callback) {
  var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi
  if (!patrn.exec(value)) {
    callback()
  } else {
    callback(new Error('不能输入中文,请重新输入'))
  }
}
export function nameValidator (rule, value, callback) {
  if (value.length <= 0 || value.length > 30) {
    callback(new Error('不可为空,长度最大30位'))
  } else if (!isValidSLAName(value)) {
    callback(new Error('只能由汉字,字母和数字组成'))
  } else {
    callback()
  }
}
export function validateReferenceValue (rule, value, callback) {
  const reg = /^[1-9][0-9]*$/
  if (value.length > 2) {
    callback(new Error('请输入正整数次数,限2位'))
  } else if (!reg.test(value)) {
    callback(new Error('请输入正整数次数,限2位'))
  } else {
    callback()
  }
}

export function validateCustomerCoName (rule, value, callback) {
  const reg = /^[\u4E00-\u9FA5A-Za-z0-9()()]+$/
  if (!reg.test(value) || value.trim().length > 60) {
    callback(new Error('请输入单位名称,限60字符内中文、英文、数字、括弧'))
  } else {
    callback()
  }
}

export function validateCycleTime (rule, value, callback) {
  const reg = /^[1-9][0-9]*$/
  if (value.length > 5) {
    callback(new Error('请输入正整数天数,限5位'))
  } else if (!reg.test(value)) {
    callback(new Error('请输入正整数天数,限5位'))
  } else {
    callback()
  }
}

export function validateEmail (rule, value, callback) {
  const reg = /^(([^<>()[\]\\.,;:\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,}))$/
  if (value === '') {
    callback()
  }
  if (!reg.test(value)) {
    callback(new Error('请输入正确邮箱地址'))
  } else {
    callback()
  }
}

export function validateIdCard (rule, value, callback) {
  if (value === '') {
    callback()
  }
  const city = {
    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 (
    !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/i.test(
      value
    )
  ) {
    callback(new Error('请输入正确的身份证号'))
  } else if (!city[value.substr(0, 2)]) {
    callback(new Error('请输入正确的身份证号'))
  } else {
    callback()
  }
};
export function validateCompanyName (rule, value, callback) {
  if (value === '') {
    callback()
  }
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
  if (!reg.test(value)) {
    callback(new Error('只能输入汉字,字母和数字,1-20个字符'))
  } else {
    callback()
  }
}
// 是否是由汉字数字组成的合法名称*/
export function validateUserName (rule, value, callback) {
  const reg = /^[\u4e00-\u9fa5][\u4e00-\u9fa50-9]{1,10}$/
  if (!reg.test(value)) {
    callback(new Error('请输入正确的姓名'))
  } else {
    callback()
  }
};

// 是否是由汉字数字字母组成的合法名称*/
export function validateOrgName (rule, value, callback) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
  if (value === '') {
    callback(new Error('请输入组织名称'))
  }
  if (!reg.test(value)) {
    callback(new Error('组织名称由中文英文数字组成,1-20个字符'))
  } else {
    callback()
  }
};

// 是否字母数字_组成的合法code*/
export function validateAccountName (rule, value, callback) {
  const reg = /^[A-Za-z][A-Za-z0-9_-]{3,19}$/
  if (value === '') {
    callback()
  }
  if (!reg.test(value)) {
    callback(
      new Error('账户名首位为字母其余字母、数字、连接符、下划线组成4~20个字符')
    )
  } else {
    callback()
  }
};

export function validateComponyName (rule, value, callback) {
  const companyNameReg = /^[A-Za-z0-9\u4e00-\u9fa5]{1,20}$/
  if (!companyNameReg.test(value)) {
    callback(new Error('只能输入汉字,大小写字母或数字1到20个字符'))
  } else {
    callback()
  }
}
// 是否是由大小写字母,数字和_组成的合法模块编码*/
export function isValidModuleCode (str) {
  const reg = /^[A-Za-z0-9_]+$/
  return reg.test(str)
}
// 是否是由汉字,字母,数字组成的合法模块名称*/
export function isValidModuleName (str) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
  return reg.test(str)
}
// 是否正整数*/
export function isNumber (str) {
  const reg = /^[1-9][0-9]*$/
  return reg.test(str)
}
// 请输入正数(含浮点数)
export function numP (rule, value, callback) {
  if (value === '' || (value - parseFloat(value) >= 0 && !/[-]/.test(value) && Number(value) !== 0)) {
    callback()
  } else {
    callback(new Error('请输入正数!'))
  }
}
export function validateIsNumber (rule, value, callback) {
  const reg = /^[1-9][0-9]*$/
  if (value !== '' && !reg.test(value)) {
    callback(new Error('请输入数字'))
  } else {
    callback()
  }
}
export function isValidRoleName (str) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
  return reg.test(str)
}
// 是否是由大写字母和_组成的合法角色编码*/
export function isValidRoleCode (str) {
  const reg = /^[A-Z_]+$/
  return reg.test(str)
}

export function validateCorporation (rule, value, callback) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]{1,20}$/
  if (value !== '' && !reg.test(value)) {
    callback(new Error('只能输入汉字,大小写字母或数字1到20个字符'))
  } else {
    callback()
  }
}
export function validateNumber (rule, value, callback) {
  const reg = /^[1-9][0-9]*$/
  if (value === '') {
    callback()
  }
  if (!reg.test(value)) {
    callback(new Error('排序号只能是正整数'))
  } else {
    callback()
  }
}

// 是否是由汉字数字组成的合法名称*/
export function validame (str) {
  const reg = /^[\u4e00-\u9fa5][\u4e00-\u9fa50-9]{1,10}$/
  return reg.test(str)
}

// 是否是邮箱
export function isEmail (str) {
  const reg = /^(([^<>()[\]\\.,;:\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(str)
}

// 是否是手机
export function isPhone (str) {
  const reg = /^1[3456789]\d{9}$/
  return reg.test(str)
}
/*
* 校验联系电话,支持手机和固定电话,固定电话包含400,800
*/
export function validatePhone (rule, value, callback) {
  if (!value || (value && value.trim() === '')) {
    callback()
  }
  const reg = /^(0[0-9]{2,3})?(-| )?([2-9][0-9]{6,7})$/
  const regMobile = /^1[3456789]\d{9}$/
  const reg48 = /^[48]00(-| )?(([0-9]{3}(-| )?[0-9]{4})|([0-9]{4}(-| )?[0-9]{3}))$/
  if (!reg.test(value) && !regMobile.test(value) && !reg48.test(value)) {
    callback(new Error('请输入正确的手机号或座机号'))
  } else {
    callback()
  }
}

export function testLongitude (r, v, cb) {
  if (!v || (v && v.trim() === '')) {
    cb()
  } else {
    if (/^(-?\d+)(\.\d+)?$/.test(v)) {
      const longitude = Math.abs(parseFloat(v))
      if (longitude <= 180) {
        cb()
      } else {
        cb(new Error('请输入-180 ~ 180度的经度'))
      }
    } else {
      cb(new Error('请输入数字'))
    }
  }
}
export function validateClientName (r, v, cb) {
  if (v) {
    if (v.trim().length > 64) {
      cb(new Error('请限制输入字数在64位以内'))
    } else {
      if (isValidContent(v)) {
        cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
      } else {
        cb()
      }
    }
  } else {
    cb()
  }
}

export function validateTitle (r, v, cb) {
  if (v) {
    if (v.length > 50) {
      cb(new Error('输入超出限制,请小于50个字符'))
    } else {
      if (isValidContent(v)) {
        cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
      } else {
        cb()
      }
    }
  } else {
    cb()
  }
}
export function validateOtherMethod (r, v, cb) {
  if (v.trim()) {
    if (v.trim().length > 300) {
      cb(new Error('请限制输入字数在300位以内'))
    } else {
      if (isValidContent(v)) {
        cb(new Error('请输入合法内容(不含‘@,%,&’等字符)'))
      } else {
        cb()
      }
    }
  } else {
    cb(new Error('输入内容不能为空'))
  }
}

export function testLatitude (r, v, cb) {
  if (!v || (v && v.trim() === '')) {
    cb()
  } else {
    if (/^(-?\d+)(\.\d+)?$/.test(v)) {
      const latitude = Math.abs(parseFloat(v))
      if (latitude <= 90) {
        cb()
      } else {
        cb(new Error('请输入-90 ~ 90度的纬度'))
      }
    } else {
      cb(new Error('请输入数字'))
    }
  }
}
// 是否是由汉字,字母,数字组成的合法项目名称*/
export function isValidProjectName (str) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
  return reg.test(str)
}

// 是否含非法字符
export function isValidContent (str) {
  const reg = /[`~@#<>$%^&*]/im
  return reg.test(str)
}

// 是否是由字母,数字组成的合法项目合同编号*/
export function isValidContractNum (str) {
  const reg = /^[A-Za-z0-9]+$/
  return reg.test(str)
}

// 是否是由汉字,字母,数字组成的合法SLA名称*/
export function isValidSLAName (str) {
  const reg = /^[\u4e00-\u9fa5A-Za-z0-9]+$/
  return reg.test(str)
}

// 是否数字*/
export function isFloat (str) {
  const reg = /^(-?\d+)(\.\d+)?$/
  return reg.test(str)
}

// 是否字母数字_组成的合法code*/
export function isValidCode (str) {
  const reg = /^[a-zA-Z0-9_]+$/
  return reg.test(str)
}

// 合法uri*/
export function validateURL (textval) {
  const urlregex = /^(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 urlregex.test(textval)
}

// 小写字母*/
export function validateLowerCase (str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

// 验证key*/
// export function validateKey(str) {
//     var reg = /^[a-z_\-:]+$/;
//     return reg.test(str);
// }

// 大写字母*/
export function validateUpperCase (str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

// 大小写字母*/
export function validatAlphabets (str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

// 身份证号合法性验证
// 支持15位和18位身份证号
// 支持地址编码、出生日期、校验位验证
export function identityCodeValid (code) {
  let city = { 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: '国外 ' }
  let pass = true
  if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {
    pass = false
  } else if (!city[code.substr(0, 2)]) {
    pass = false
  } else {
    // 18位身份证需要验证最后一位校验位
    // if (code.length === 18) {
    //   code = code.split('')
    //   // ∑(ai×Wi)(mod 11)
    //   // 加权因子
    //   let factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]
    //   // 校验位
    //   let parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]
    //   let sum = 0
    //   let ai = 0
    //   let wi = 0
    //   for (let i = 0; i < 17; i++) {
    //     ai = code[i]
    //     wi = factor[i]
    //     sum += ai * wi
    //   }
    //   if (parity[sum % 11] !== code[17]) {
    //     pass = false
    //   }
    // }
  }
  return pass
}

/* 是否合法IP地址 */
export function checkIp (rule, value, callback) {
  if (value == '' || value == undefined || value == null) {
    callback()
  } else {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if ((!reg.test(value))) {
      callback(new Error('IP格式不正确'))
    } else {
      callback()
    }
  }
}
export function checkPort (rule, value, callback) {
  let parten = /^(\d)+$/g
  if (!value) {
    return callback(new Error('输入不可以为空'))
  } else if (!(parten.test(value) && parseInt(value) <= 65535 && parseInt(value) >= 0)) {
    callback(new Error('端口格式不正确'))
  } else {
    callback()
  }
}
export function checkname (rule, value, callback) {
  let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]+$/
  if (!value) {
    return callback(new Error('名称由数字、字符、中文组成'))
  } else if (!name.test(value)) {
    callback(new Error('名称由数字、字符、中文组成'))
  } else {
    callback()
  }
}

export function checkProbename (rule, value, callback) {
  let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]{3,50}$/
  if (!value) {
    return callback(new Error('名称由数字、字符、中文组成3-50位'))
  } else if (!name.test(value)) {
    callback(new Error('名称由数字、字符、中文组成3-50位'))
  } else {
    callback()
  }
}

export function checkTemplateName (rule, value, callback) {
  let name = /^[0-9a-zA-Z-_'\u4e00-\u9fa5]{3,14}$/
  if (!value) {
    return callback(new Error('名称由数字、字符、中文组成3-14位'))
  } else if (!name.test(value)) {
    callback(new Error('名称由数字、字符、中文组成3-14位'))
  } else {
    callback()
  }
}

// 密码等级*/
export function getPwdRank (input, userName) {
  // (1)等级0(风险口令):口令长度小于8字节,或只包含4类字符中的任意一类,或口令与用户名一样,或口令是用户名的倒写
  // (2)等级1(弱口令):包含两类字符,且组合为(数字+小写字母)或(数字+大写字母),且长度大于等于8字节。
  // (3)等级2(中口令):包含两类字符,且组合不能为(数字+小写字母)或(数字+大写字母),且长度大于等于8字节。
  // (4)等级3(强口令):包含三类字符及以上,且长度大于等于8字节
  if (!input) {
    return ''
  }
  if (input.length < 8 || input === userName || input === userName.split('').reverse().join('')) {
    return 1
  }
  let iRank = 0
  input.match(/[a-z]/g) && iRank++
  input.match(/[A-Z]/g) && iRank++
  input.match(/[0-9]/g) && iRank++
  // eslint-disable-next-line
  const reg = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/i
  if (reg.test(input)) {
    if (iRank === 1) {
      return 3
    } else {
      iRank++
    }
  }
  return iRank === 3 ? 4 : iRank
}
// 最多两位小数
export function fixTwo (rule, value, callback) {
  if (/^\d+(\.\d{0,2})?$/.test(value)) {
    callback()
  } else {
    callback(new Error('最多输入两位小数!'))
  }
}
// 非负整数(0和正整数)
export function integerZP (rule, value, callback) {
  if (value === '' || /^\d+$/.test(value)) {
    callback()
  } else {
    callback(new Error('请输入非负整数!'))
  }
}
// 最大长度限制
export function maxLength (rule, value, callback) {
  var len = 200
  var temp = 0
  for (var i = 0; i < value.length; i++) {
    if (/[\u4e00-\u9fa5]/.test(value[i])) {
      temp += 2
    } else {
      temp++
    }
    if (temp > len) {
      callback(new Error('内容过长,超过最大限度'))
    }
  }
}
export function maxValue (rule, value, callback) {
  if (value === '' || value <= rule.maxValue) {
    callback()
  } else {
    callback(new Error(`最大值${rule.maxValue}`))
  }
}

// 正整数
export function integerP (rule, value, callback) {
  if (value === '' || /^[0-9]*[1-9][0-9]*$/.test(value)) {
    callback()
  } else {
    callback(new Error('请输入正整数!'))
  }
}

/**
 * 数字,0-100,最多支持两位小数
 */
export function numOfMaxTwoDecimal (rule, value, callback) {
  if (/^(0?(\.\d{1,2})?|[1-9][0-9]?(\.\d{1,2})?|100(\.[0]{1,2})?)$/.test(value)) {
    callback()
  } else {
    callback(new Error('最多支持两位小数!'))
  }
}
/**
 * 数字,0-100,最多支持4位小数
 */
export function numOfMaxFourDecimal (rule, value, callback) {
  if (/^\d+(\.\d{1,4})?$/.test(value)) {
    callback()
  } else {
    callback(new Error('最多支持四位小数!'))
  }
}

// 整数校验 [n, m]*/
export function numRange (str, n, m) {
  const reg = /^[0-9]\d*$/
  return Number(str) >= n && Number(str) <= m && reg.test(str)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容