公共方法抽取
/*
* @Date: 2020-11-17 15:33:42
* @Description: 查询条件正则方法抽取
*/
// 正则集合
const REG_SET= {
phone_reg:/^1[3456789]\d{9}$/,
card_reg:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
tel_reg:/0\d{2}-\d{7,8}/,
email_reg:/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/,
url_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.,?'\\+&%$#=~_-]+))*$/;
}
// 默认校验集合
const default_strategies = {
// 不能为空
isEmpty:(value,message) => {
if( value==="") return message
},
// 长度校验小于多少位
minLength:(value,length,message) => {
const valueLen = (value+"").length //如果传入的值为Number,需隐式转换
if(valueLen < length) return message
},
// 手机号校验
isPhone:(value,message) => {
if(!REG_SET['phone_reg'].test(value)) return message
},
// 身份证号码校验
isCard:(value,message)=> {
if(!REG_SET['card_reg'].test(value)) return message
},
// 固话校验
isTel:(value,message)=> {
if(!REG_SET['tel_reg'].test(value)) return message
},
// 邮箱校验
isEmail:(value,message)=> {
if(!REG_SET['email_reg'].test(value)) return message
},
// url校验
isUrl:(value,message)=> {
if(!REG_SET['url_reg'].test(value)) return message
},
}
// 策略类
export default class Vaildator{
constructor(strategies={}){
this.cache = []
this.strategies = Object.assign(default_strategies,strategies)
}
/**
* @description 添加校验对象和规则
* @param{value} 校验的对象
* @param{rules} 校验的规则的集合
*/
add( value,rules ){
const _this = this
rules.forEach(rule=>{
~function(rule){
const ary = rule.strategy.split(":"),
msg = rule.errMsg;
_this.cache.push( function(){
const strategy = ary.shift() // 校验的键
ary.unshift(value)
ary.push(msg)
return _this.strategies[strategy].apply(null,ary)
})
}(rule)
})
}
/**
* @description 开启校验
*/
start(){
const len = this.cache.length
for( let i = 0; i<len ;i++ ){
let errMsg = undefined
if( this.cache[i]) errMsg = this.cache[i]()
if(errMsg) return errMsg
}
}
}
组件内使用方式
import Vaildator from 'until/check.js'
// new 一个规则校验对象,如果没有对应校验规则可以自己添加校验策略
const checkObj = new Vaildator({
isCard:(value,message)=>{
if(!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value))) return message
}
})
const a = '',b = "131127199810260530",c="13722807589";
checkObj.add(b,[{
strategy: 'isCard',
errMsg: '请输入正确的身份证号!'
}])
checkObj.add(a,[{
strategy: 'isEmpty',
errMsg: '输入内容不能为空!'
}])
const errmsg = checkObj.start()
console.log(errmsg)