204 lines
4.9 KiB
JavaScript

import utils from '@/assets/js/utils'
/** 英文编码正则 */
const codeReg = /^[A-Za-z0-9_\-\.]+$/
/** 手机号正则 */
const mobileReg = /^1[3456789]\d{9}$/
/** 大陆身份证正则 */
const idNoReg = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/
/** email正则 */
const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
const commonValidator = (rule, value, callback) => {
if (utils.isNull(value)) {
callback()
} else {
callback()
}
}
const notBlankValidator = (rule, value, callback) => {
if (utils.isBlank(value)) {
callback(new Error('输入不能为空'))
} else {
callback()
}
}
const nameValidator = (rule, value, callback) => {
if (utils.isBlank(value)) {
callback()
} else if (value.length > 50) {
callback(new Error('字符数不能超过50'))
} else {
callback()
}
}
const mobileValidator = (rule, value, callback) => {
if (utils.isNull(value)) {
callback()
} else if (!mobileReg.test(value)) {
callback(new Error('手机号格式错误'))
} else {
callback()
}
}
const idNoValidator = (rule, value, callback) => {
if (utils.isNull(value)) {
callback()
} else if (!idNoReg.test(value)) {
callback(new Error('手机号格式错误'))
} else {
callback()
}
}
const emailValidator = (rule, value, callback) => {
if (utils.isNull(value)) {
callback()
} else if (!emailReg.test(value)) {
callback(new Error('手机号格式错误'))
} else {
callback()
}
}
const codeValidator = (rule, value, callback) => {
if (utils.isBlank(value)) {
callback()
} else if (!codeReg.test(value)) {
callback(new Error('编码格式错误'))
} else {
callback()
}
}
const intValidator = (rule, value, callback) => {
if (utils.isBlank(value)) {
callback()
} else if (!Number.isInteger(value)) {
callback(new Error('请输入整数'))
} else {
callback()
}
}
function validator() {
console.log("arguments:", arguments)
if (arguments.length <= 1) {
const type = arguments[0]
// 默认校验逻辑, 不含有特殊字符
if (utils.isBlank(type)) {
return commonValidator
} else if (type == 'notBlank') {
return notBlankValidator
} else if (type == 'name') {
return nameValidator
} else if (type == 'mobile') {
return mobileValidator
} else if (type == 'idNo') {
return idNoValidator
} else if (type == 'email') {
return emailValidator
} else if (type == 'code') {
return codeValidator
} else if (type == 'int') {
return intValidator
} else {
return commonValidator
}
}
// 复合校验器
const complexValidator = (rule, value, callback) => {
for (let i = 0; i < arguments.length; i++) {
const typeStr = arguments[i]
if (typeStr == 'notBlank' && utils.isBlank(value)) {
callback(new Error('输入不能为空'))
break
} else if (typeStr == 'code' && !codeReg.test(value)) {
callback(new Error('编码格式错误'))
break
} else if (typeStr == 'int' && Number.isInteger(value)) {
callback(new Error('请输入整数'))
break
}
}
// 兜底callback()只会触发一次
callback()
}
return complexValidator
}
export default {
username: (username) => {
if (typeof (username) == "undefined" || username == null) {
return "账号不能为空"
}
username = username.trim()
if (username.length < 4) {
return "账号字符不能小于4位"
}
if (username.length > 20) {
return "账号字符不能大于20位"
}
const reg = /^[A-Za-z0-9]+$/
if (!reg.test(username)) {
return "账号为必须为字母和数字"
}
return null
},
password: (password) => {
if (typeof (password) == "undefined" || password == null) {
return "密码不能为空"
}
password = password.trim()
if (password.length < 4) {
return "密码字符不能小于4位"
}
if (password.length > 20) {
return "密码字符不能大于20位"
}
const reg = /^[A-Za-z0-9\.\-\_\+]+$/
if (!reg.test(password)) {
return "密码为必须为字母和数字或.-+_"
}
return null
},
email: (email) => {
if (typeof (email) == "undefined" || email == null) {
return "邮箱不能为空"
}
const reg = /^[A-Za-z0-9._%-]+@([A-Za-z0-9-]+\.)+[A-Za-z]{2,4}$/
if (!reg.test(email)) {
return "邮箱格式不正确"
}
return null
},
validCode: (validCode) => {
if (typeof (validCode) == "undefined" || validCode == null) {
return "验证码不能为空"
}
validCode = validCode.trim()
if (validCode.length != 6) {
return "验证码必须为6位"
}
const reg = /^[A-Za-z0-9]{6}$/
if (!reg.test(validCode)) {
return "验证码格式不正确"
}
return null
},
validator,
}