ty-mobile-uni
Version:
uView UI,是uni-app生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
129 lines • 3.6 kB
JavaScript
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
}