validate.js 4.6 KB
const install = (Vue, vm) => {

	const required = (message, trigger) => {
		return {
			// 自定义验证函数,见上说明
			validator: (rule, value, callback) => {
				if (Array.isArray(value)) {
					return value.length > 0 ? true : false
				} else if (typeof(value) == 'string' && value && !value.trim()) {
					return value.trim() ? true : false;
				} else if (typeof(value) == 'object') {
					return JSON.stringify(value) != '{}' ? true : false;
				} else {
					return value != 0 && (typeof(value) == 'number' || value ? true : false);
				}
			},
			message: message ? message : '必填项不能为空',
			// 触发器可以同时用blur和change
			trigger: trigger ? trigger : ['change', 'blur'],
		}
	}

	const digits = {
		// 自定义验证函数,见上说明
		validator: (rule, value, callback) => {
			// 上面有说,返回true表示校验通过,返回false表示不通过
			return value ? vm.$u.test.digits(value) : true;
		},
		message: '请输入正整数',
		// 触发器可以同时用blur和change
		trigger: ['change', 'blur'],
	}

	//数字是否在某个范围内
	const rangeNumber = function(params) {
		return {
			validator: (rule, value, callback) => {
				return value ? vm.$u.test.range(value, params) : true;
			},
			message: `请输入${params[0]}${params[1]}`,
			trigger: ['change', 'blur'],
		}
	}

	//字符串长度是否在某个范围内
	const rangeLength = function(params) {
		return {
			validator: (rule, value, callback) => {
				return value ? vm.$u.test.rangeLength(value, params) : true;
			},
			message: `长度在${params[0]}${params[1]}个字符`,
			trigger: ['change', 'blur'],
		}
	}

	//字符串最大长度
	const maxLehgth = function(params) {
		return {
			max: params,
			message: `字符长度不超过${params}位`,
			trigger: ['change', 'blur'],
		}
	}

	//字母或数字
	const LetterOrNumer = {
		pattern: /^[0-9a-zA-Z]*$/g,
		// 正则检验前先将值转为字符串
		transform(value) {
			return String(value);
		},
		message: '只能包含字母或数字'
	}

	const email = {
		// 自定义验证函数,见上说明
		validator: (rule, value, callback) => {
			// 上面有说,返回true表示校验通过,返回false表示不通过
			return value ? vm.$u.test.email(value) : true;
		},
		message: '邮箱格式不正确',
		// 触发器可以同时用blur和change
		trigger: ['change', 'blur'],
	}

	const mobile = {
		validator: (rule, value, callback) => {
			return value ? vm.$u.test.mobile(value) : true;
		},
		message: '手机号码不正确',
		trigger: ['change', 'blur'],
	}

	const name = {
		// 自定义验证函数,见上说明
		validator: (rule, value, callback) => {
			// 上面有说,返回true表示校验通过,返回false表示不通过
			return value ? vm.$u.test.chinese(value) : true;
		},
		message: '姓名必须为中文',
		// 触发器可以同时用blur和change
		trigger: ['change', 'blur'],
	}



	//是否验证码
	const verifyCode = function(params) {
		return {
			validator: (rule, value, callback) => {
				return vm.$u.test.code(value, params);
			},
			message: `验证码不正确`,
			trigger: ['change', 'blur'],
		}
	}

	//身份证号
	const idCard = {
		validator: (rule, value, callback) => {
			return value ? vm.$u.test.idCard(value) : true;
		},
		message: '身份证号不正确',
		trigger: ['change', 'blur'],
	}

	//数值是否在某个范围内
	const height = function(params) {
		return {
			validator: (rule, value, callback) => {
				return value ? vm.$u.test.range(value, params) : true;
			},
			message: `身高在${params[0]}${params[1]}cm`,
			trigger: ['change', 'blur'],
		}
	}

	//数值是否在某个范围内
	const weight = function(params) {
		return {
			validator: (rule, value, callback) => {
				return value ? vm.$u.test.range(value, params) : true;
			},
			message: `体重在${params[0]}${params[1]}kg`,
			trigger: ['change', 'blur'],
		}
	}

	const qq = {
		pattern: /^[1-9][0-9]{4,14}$/gim,
		message: 'QQ号不正确',
		trigger: ['change', 'blur'],
	}

	const weixin = {
		pattern: /^[a-zA-Z][a-zA-Z\d_-]{5,19}$/,
		message: '微信号不正确',
		trigger: ['change', 'blur'],
	}



	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
	vm.$u.cusTest = {
		required,
		digits,
		rangeNumber,
		rangeLength,
		mobile,
		verifyCode,
		name,
		idCard,
		height,
		weight,
		maxLehgth,
		qq,
		weixin,
		email,
	};
}

export default {
	install
}