import kindOf from 'kind-of' import { RulePropsType } from './PropTypes' const rules = { required: { required: true, message: '该字段是必填字段', }, /** * 邮编 */ zip: { pattern: /^[1-9]\d{5}(?!\d)$/, message: '该字段不是合法的邮编格式', }, /** * 邮箱 */ email: { pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, message: '该字段不是合法的邮箱格式', }, /** * 中文字符 */ zh: { pattern: /^[\u4e00-\u9fa5]+$/gm, message: '该字段不是合法的中文字符串', }, /** * 中文名正则 */ zhName: { pattern: /^[\u4e00-\u9fa5]{2,15}$/, message: '该字段不是合法的中文名', }, /** * 网址 */ url: { pattern: /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i, message: '该字段不是合法的url', }, /** * 电话号正则,包含手机号、固话号、400电话 */ phone: { pattern: /^(0|86|17951)?(13[0-9]|14[579]|15[012356789]|166|17[1235678]|18[0-9]|19[189])\s{0,1}[0-9]{4}\s{0,1}[0-9]{4}$|^(0[0-9]{2,3}-?)?[0-9]{7,8}$|^400-?\d{3}-?\d{4}$/, message: '该字段不是有效的电话号', }, /** * 手机号正则 */ mobilePhone: { pattern: /^(0|86|17951)?(13[0-9]|14[579]|15[012356789]|166|17[1235678]|18[0-9]|19[189])\s{0,1}[0-9]{4}\s{0,1}[0-9]{4}$/, message: '该字段不是有效的手机号', }, /** * 固话正则,包含400电话 */ telephone: { pattern: /^(0[0-9]{2,3}-?)?[0-9]{7,8}$|^400-?\d{3}-?\d{4}$/, message: '该字段不是有效的固话号', }, /** * 身份证正则 */ idCard: { pattern: /^(^[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])$)$/, message: '该字段不是合法的身份证格式', }, /** * 日期 */ date: { pattern: /^(?:(?:1[6-9]|[2-9][0-9])[0-9]{2}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)([-/.]?)0?2\2(?:29))(\s+([01][0-9]:|2[0-3]:)?[0-5][0-9]:[0-5][0-9])?$/, message: '该字段不是合法的日期格式', }, /** * 货币字符 */ money: { pattern: /^[+-]?[0-9]+(.{1}[0-9]+){0,1}$/, message: '该字段不是合法的金额', }, /** * 数字 */ number: { pattern: /^[+-]?\d+$/, message: '该字段不是合法的数字', }, /** * 整型数字 */ integer: { pattern: /^[+-]?\d+$/, message: '该字段不是合法的整型数字', }, /** * 浮点数 */ floating: { pattern: /^[+-]?[0-9]+(.{1}[0-9]+){0,1}$/, message: '该字段不是合法的浮点型数字', }, /** * 2的倍数 */ twoTimes: { pattern: /^([02468]|[13579][13579]*[02468])*$/, message: '该字段值必须是2的倍数', }, /** * 3的倍数 */ threeTimes: { pattern: /^([0369]|[258][0369]*[147]|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*$/, message: '该字段值必须是3的倍数', }, /** * 4的倍数 */ fourTimes: { validator: (rule, value, callback) => { if (isNaN(value) || value % 4 !== 0) { callback(rule.message) } callback() }, message: '该字段必须是4的倍数', }, fiveTimes: { validator: (rule, value, callback) => { if (isNaN(value) || value % 5 !== 0) { callback(rule.message) } callback() }, message: '该字段必须是5的倍数', }, sixTimes: { validator: (rule, value, callback) => { if (isNaN(value) || value % 6 !== 0) { callback(rule.message) } callback() }, message: '该字段必须是6的倍数', }, } export const getRules = (originRules?: RulePropsType) => { const rulesObj: any = [] originRules && originRules.forEach((item: any) => { if (kindOf(item) === 'string') { const rule = rules[item] rulesObj.push(rule) } else if (item.type) { const rule = rules[item.type] const customMessage = { pattern: rule.pattern, message: item.message || rule.message, } rulesObj.push(customMessage) } else { rulesObj.push(item) } }) return rulesObj }