import {toString} from "./typeTool"; let requiredRuleItem = {require: true,message:'该项为必填项'} let phoneRule = [{ type: 'string', length: 11, message: '手机号长度必须是11字符' },{ regex: /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/, message: '手机号格式不正确' }] let passwordRule= [{ type: 'string', minLength: 6, maxLength: 18, message: '密码长度为6-18' }] let imeiRule = [{ type: 'string', length: 15, message: 'IMEI号长度应该为15位' }] const ownerRule= [ requiredRuleItem, { type: 'string', minLength: 1, maxLength: 16, message: '用户名owner类型或者长度不一致' }, ] const captchaRule = [{ type: 'string', length: 4, message: '验证码长度为4' }] const nameRule = [ { type: 'string', min: 1, max: 25, message: '名称长度不符合' } ] let checkCode = function (val) { let p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; let factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; let parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; let code = val.substring(17); if(p.test(val)) { let sum = 0; for(let i=0;i<17;i++) { sum += val[i]*factor[i]; } console.log(typeof parity[sum % 11]) console.log(typeof code.toUpperCase()) if(toString(parity[sum % 11]) === code.toUpperCase()) { return true; } } return false; } let checkDate = function (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; } let checkProv = function (val) { let pattern = /^[1-9][0-9]/; 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(val)) { if(provs[val]) { return true; } } return false; } const checkID = function (val) { if(checkCode(val)) { console.log('code') let date = val.substring(6,14); if(checkDate(date)) { if(checkProv(val.substring(0,2))) { console.log('匹配成功') return true; } } } return false; } const cardRule = [ requiredRuleItem, function(val){ return checkID(val)?'':'身份证验证失败'; }] const paramsRules = [ { keys: ['name','workerName','buildingName','entranceName'], rules: nameRule, }, { keys: ['imei','IMEI','Imei'], rules: imeiRule, }, { keys: ['workerType','type','cameraType','buildingAbout','entranceId'], rules: [requiredRuleItem], }, { keys: ['phone','workerPhone','companyPhone'], rules: phoneRule, }, { keys:['captcha','captchaImg'], rules:captchaRule }, { keys:['owner','account'], rules:ownerRule }, { keys:['passwd','password'], rules:passwordRule }, { keys: ['card','workerCard'], rules: cardRule, }, ] function _isEmpty(s) { return s === undefined || s === ''; } // code 1 通过 // code 2 不通过 // code 3 无对应的 let code_pass = 1, code_notPass = 2, code_notMatch = 3; function _c(key,value){ // 查找对应规则 let _obj = paramsRules.find(item=>item.keys.includes(key)); console.log(_obj) if(!_obj||!_obj.rules){ return [code_notMatch]; } // 开始匹配规则 for(let _rule of _obj.rules ){ if(typeof _rule === 'function'){ let _msg = _rule(value); // console.log(_msg) if(_msg){ return [code_notPass,_msg] } } if(_rule.require&&_isEmpty(value)){ return [code_notPass,_rule.message] } if(_rule.type&&typeof value !== _rule.type){ return [code_notPass,_rule.message] } if(_rule.length&&value.length !== _rule.length){ return [code_notPass,_rule.message] } if(_rule.minLength&&value.length < _rule.minLength){ return [code_notPass,_rule.message] } if(_rule.maxLength&&value.length > _rule.maxLength){ return [code_notPass,_rule.message] } if(_rule.regex&&!_rule.regex.test(value)){ return [code_notPass,_rule.message] } } return [code_pass] } /** * 检查对应字段值是否符合规则,不规则则返回对应的错误码 * @param _o * @param isMustMatch * @returns {string|*} */ function checkField(_o,isMustMatch=false){ console.log(_o) for (const _oKey in _o) { let value = _o[_oKey]; let r = _c(_oKey,value); if(r[0] === code_notPass){ return r[1] }else if(isMustMatch && r[0] === code_notMatch){ return `字段没有对应匹配项` } } } export default checkField;