123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import validate from './validate.js'
- // 默认校验规则
- const rules = {
- // 自定义规则
- ...validate,
- // 数据类型
- type: function(val, param) {
- let msgObj = {'string': '字符串', 'boolean': '布尔值', 'objec': '对象'}
- if(param[0] == 'number') {
- if(val == '' || isNaN(Number(val))) {
- return '不是一个数字'
- }
- } else if(typeof val != param[0]){
- return msgObj[param[0]] ? '不是' + msgObj[param[0]] : '数据类型不符合'
- }
- return true
- },
- // 值 小于等于
- max: function(val, param) {
- let msg = this.type(val,['number'])
- if(msg !== true) {
- return msg
- }
- if(val > param[0]) {
- return '值不能超过' + param[0]
- }
- return true
- },
- // 值 大于等于
- min: function(val, param) {
- let msg = this.type(val,['number'])
- if(msg !== true) {
- return msg
- }
- if(val.length < param[0]) {
- return '值不能小于' + param[0]
- }
- return true
- },
- /*
- * 长度范围
- * 1. length:2 长度等于某值
- * 2. length:0,2 长度在某区间
- * 3. length:2,~ 长度不小于
- * 4. length:~,5 长度不大于
- */
- length: function(val, param) {
- if(param.length > 1) {
- if(param[1].trim() == '~' && val.length < param[0]) {
- return '长度不能小于' + param[0]
- } else if (param[0].trim() == '~' && val.length > param[1]){
- return '长度不能超过' + param[1]
- } else if(val.length < param[0] || val.length > param[1]) {
- return '长度应在' + param[0] + '~' + param[1] + '之间'
- }
- }else if(val.length != param[0]){
- return '长度应等于' + param[0]
- }
- return true
- },
- // 值的范围
- between: function(val, param) {
- if(param.length > 1) {
- if(Number(val) < Number(param[0]) || Number(val) > Number(param[1])) {
- return '应在' + param[0] + '~' + param[1] + '之间'
- }
- }else if(val != param[0]){
- return '应等于' + param[0]
- }
- return true
- },
- // 校验值在给定的值中
- in: function(val, param) {
- if(!param.includes(val)){
- return '应该在' + param.join() + '之中'
- }
- return true
- },
- // 校验值是否与某字段值相等
- eq: function(val, param, from) {
- if(from[param[0]] && val != from[param[0]]){
- return '与' + param[0] + '不相等'
- }
- return true
- },
- reg: function(val, param) {
- var reg = new RegExp(param);
- if (!reg.test(val)) {
- return '不符合正则'
- }
- return true
- },
- date: function(val) {
- if (new Date(val).getDate()!=val.substring(val.length-2)) {
- return '不是一个有效的日期'
- }
- return true
- },
- }
- // 字符串转数组
- function getArr(val,str) {
- return val.split ? val.split(str) : val
- }
- // 表单默认规则校验 通过返回 true 不通过返回对象 {msg:'不通过原因','rule': '规则名'}
- export const fromCheck = function(val, rule,form) {
- // 'type: string|length:5|in:1,3|between:0,5' 字符串形式
- // ['type: string','length:5','in:1,3','between:0,5'] // 数组、字符串混合
- // ['string',['length',5],['in',[1,3],['between', [0,5]]]] 最终形式
- rule = getArr(rule,'|')
- const len = rule.length;
- for (let i = 0; i < len; ++i ) {
- let key = '',param = ''
- if(rule[i].indexOf('reg') == 0){
- // 正则
- key = 'reg'
- param = rule[i].slice(rule[i].indexOf(':') + 1)
- }else{
- rule[i] = getArr(rule[i],':')
- key = rule[i][0].trim()
- param = rule[i][1] ? getArr(rule[i][1],',') : [];
- }
- if(!rules[key]) continue
- let msg = rules[key](val, param, form)
- if(msg !== true) {
- return {msg:msg,rule: key}
- }
- }
- return true
- }
|