驗證下面的資料
//等待驗證的資料let awitWerified = { //必須填寫、必須是string型別、最小長度6位、最大長度10位 name:'123', //必須填寫、必須是手機號 phone:'15211111198'}
編寫規則
let rules={ // 必填 required: function(value, errorMsg='不能為空') { if(value === ''|| value == null) { return errorMsg } }, // 最小值 min: function(value, length, errorMsg=`${value.length?'長度':''}不能小於${length}`){ let val = value.length || value if(val < length) { return errorMsg } }, // 最大值 max: function(value, length, errorMsg=`${value.length?'長度':''}不能大於${length}`){ let val = value.length || value if(val > length) { return errorMsg } }, // 手機號校驗 mobile:function(value, errorMsg=`手機號碼不正確`){ if(!/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/.test(value)){ return errorMsg } }, // 字串型別 string:function(value, errorMsg='必須為字串型別') { if(typeof value !== "string"){ return errorMsg } },}複製程式碼
實現核心類(21行)class Validator { rules={} constructor(){ this.rules=rules } make(data,cheacks){ return Object.keys(cheacks).map(key=>{ let val = data[key] let rules=cheacks[key].split('|') return{ key:key, fail:rules.map(rule=>{ let arg = rule.split(":") let fnKey = arg.shift() arg.unshift(val) return this.rules[fnKey].apply(val,arg) }).filter(val=>val?true:false) } }).filter(val=>val.fail.length>0?true:false) }}
簡單呼叫
//等待驗證的資料let awitWerified = { name:1, phone:'15210328198'}//透過Validator的make方法let validatorError = new Validator().make(awitWerified, { 'name' : 'required|string|min:6|max:10', 'phone' : 'required|phone',});if (validatorError) { console.log(validatorError)}
輸出如下
最新評論