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
}
}