function isNumber(v){ return v instanceof Number } function toString(v){ // 情况1 非对象,直接调用内部值 if(isNumber(v)) { return v + '' } return v + ''; } 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: '名称长度不符合' } ] const hrefRule = [ { type: 'string', min: 1, max: 500, message: '链接长度不符合' }, { type: 'string', // 是否符合url地址,支持域名与ip/^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?$/ regex: /(https?|ftp|file|http):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/, message: '链接格式不正确' }, ]; const requireIdRule = [ requiredRuleItem, ] 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)?'':'身份证验证失败'; }] export const paramsRules = [ { name: "用户名验证规则", checkFields: ['name','workerName','buildingName','entranceName'], rules: nameRule, }, { name: "设备imei号验证", checkFields: ['imei','IMEI','Imei'], rules: imeiRule, }, { name: "类型等必填项验证规则", checkFields: ['workerType','type','cameraType','buildingAbout','entranceId'], rules: [requiredRuleItem], }, { name: "手机号验证", checkFields: ['phone','workerPhone','companyPhone'], rules: phoneRule, }, { name: "验证码验证", checkFields:['captcha','captchaImg'], rules:captchaRule }, { name: "账户", checkFields:['owner','account'], rules:ownerRule }, { checkFields:['passwd', 'password'], rules:passwordRule }, { checkFields: ['card', 'workerCard'], rules: cardRule, }, { checkFields: ['href', 'url'], rules: hrefRule, }, { checkFields: [/id/gi,'fileData', 'remark'], rules: requireIdRule } ] export default { paramsRules }