表单常用校验规则

1、电话校验

export function checkPhone (rule, value, callback) {
  const reg = /^1[3-9][0-9]\d{8}$/
  if (value) {
    if (reg.test(value)) {
      return true
    } else {
      return false
    }
  } else {
    return true
  }
}

2、邮件校验

export function checkEmail (value) {
  if (value) {
    if (/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(value)) {
      return true
    } else {
    	new Error('邮箱格式错误')
      return false
    }
  }
}

3、身份证校验(严格)

/*
* 身份证
*/
// 身份证的验证 : 六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码
let checkProv = (value) => {
  let pattern = /^\d{2}/
  let provs = {
    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: '澳门'
  }
  if (pattern.test(value)) {
    if (provs[value.substring(0, 2)]) {
      return true
    }
  }
  return false
}
let checkDate = (val) => {
  var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/
  if (pattern.test(val)) {
    var year = val.substring(0, 4)
    var month = val.substring(4, 6)
    var date = val.substring(6, 8)
    var date2 = new Date(year + '-' + month + '-' + date)
    if (date2 && date2.getMonth() === (parseInt(month) - 1)) {
      return true
    }
  }
  return false
}
// 检测检验位是否正确
const checkParity = (cardId) => {
  const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
  let cardTemp = 0
  let valnum = ''
  for (let i = 0; i < 17; i++) {
    cardTemp += cardId.substr(i, 1) * arrInt[i]
  }
  valnum = arrCh[cardTemp % 11]
  console.log('身份证检验位应该是: ', valnum)
  return (valnum === cardId.substr(17, 1))
}
export function checkID (value) {
  if (!(/^(\d{18}|\d{15}|\d{17}x)/.test(value))) {
    return false
  } else {
    if (checkProv(value)) { // 城市地址准确
      if (checkDate(value.substring(6, 14))) { // 日期正确
        let val = value.substring(15)
        if (/^(\d{2}(\d|X|x))/.test(val)) {
          if (checkParity(value)) {
            return true
          }
        }
      }
    }
    return false
  }
}

4、经度校验 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)

export function checkLongitude (value) {
	if (value) {
      let numValue = value
      if (value.toString().indexOf('°') > -1 && value.toString().indexOf(`′`) > -1) {
        numValue = JSON.parse(JSON.stringify(changeToDu(value))) // 12°121′ 经纬度字符转换方法如下
        console.log('经度:' + numValue)
      }
      if (/^[-,+]?(0?\d{1,2}(\.\d{1,5})?|1[0-7]?\d{1}(\.\d{1,5})?|180\.0{1,5}?)$/.test(numValue)) {
        return true
      } else {
      	console.log('经度输入错误')
        return false
      }
    } else {
      // 不是必填项
      return true
    }
}

/*
* 经纬度字符转换
*/
function changeToDu (dfm) {
  const arr1 = dfm.split('°')
  const d = arr1[0]
  const arr2 = arr1[1].split(`′`)
  let f = arr2[0] || 0
  const m = arr2[1] ? (arr2[1].indexOf(`″`) > -1 ? arr2[1].split(`″`)[0] : arr2[1]) : 0
  f = parseFloat(f) + parseFloat(m / 60)
  let du = (parseFloat(f / 60) + parseFloat(d)).toFixed(5)
  return du
}

5、纬度校验 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)

export function isLatitude (value) {
    if (value) {
      let numValue = value
      if (value.toString().indexOf('°') > -1 && value.toString().indexOf(`′`) > -1) {
        numValue = JSON.parse(JSON.stringify(changeToDu(value))) // 12°121′ 纬度字符转换,方法如上
        console.log('纬度:' + numValue)
      }
      if (/^[-,+]?([0-8]?\d{1}(\.\d{1,5}|90\.0{1,5})?)$/.test(numValue)) {
        return true
      } else {
      	new Error('保留1-5位小数,-90.0~+90.0')
        return false
      }
    } else {
      // 不是必填项
      return true
    }
  }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值