207 lines
4.9 KiB
TypeScript
207 lines
4.9 KiB
TypeScript
/**
|
|
* 判断是否为空
|
|
* @param val 数据
|
|
*/
|
|
export const validateNull = (val: any) => {
|
|
if (typeof val === 'boolean') {
|
|
return false;
|
|
}
|
|
if (typeof val === 'number') {
|
|
return false;
|
|
}
|
|
if (val instanceof Array) {
|
|
if (val.length === 0) return true;
|
|
} else if (val instanceof Object) {
|
|
if (JSON.stringify(val) === '{}') return true;
|
|
} else {
|
|
if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') return true;
|
|
return false;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
export const rule = {
|
|
/**
|
|
* 校验 请输入中文、英文、数字包括下划线
|
|
* 名称校验
|
|
*/
|
|
validatorNameCn(rule: any, value: any, callback: any) {
|
|
const acount = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/;
|
|
if (value && !acount.test(value)) {
|
|
callback(new Error('请输入中文、英文、数字包括下划线'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
/**
|
|
* 校验 请输入大写英文、下划线
|
|
* 名称校验
|
|
*/
|
|
validatorCapital(rule: any, value: any, callback: any) {
|
|
const acount = /^[A-Z_]+$/;
|
|
if (value && !acount.test(value)) {
|
|
callback(new Error('请输入大写英文、下划线'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 校验 请输入小写英文、下划线
|
|
* 名称校验
|
|
*/
|
|
validatorLowercase(rule: any, value: any, callback: any) {
|
|
const acount = /^[a-z_]+$/;
|
|
if (value && !acount.test(value)) {
|
|
callback(new Error('请输入小写英文、下划线'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 校验 请输入小写英文
|
|
* 名称校验
|
|
*/
|
|
validatorLower(rule: any, value: any, callback: any) {
|
|
const acount = /^[a-z]+$/;
|
|
if (value && !acount.test(value)) {
|
|
callback(new Error('请输入小写英文'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 校验首尾空白字符的正则表达式
|
|
*
|
|
*/
|
|
checkSpace(rule: any, value: any, callback: any) {
|
|
const longrg = /[^\s]+$/;
|
|
if (!longrg.test(value)) {
|
|
callback(new Error('请输入非空格信息'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 校验手机号
|
|
*/
|
|
validatePhone(rule: any, value: any, callback: any) {
|
|
var isPhone = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
|
|
|
|
if (value.indexOf('****') >= 0) {
|
|
return callback();
|
|
}
|
|
|
|
if (!isPhone.test(value)) {
|
|
callback(new Error('请输入合法手机号'));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
|
|
/* 数字 */
|
|
number(rule, value, callback) {
|
|
validateFn('number', rule, value, callback, '包含非数字字符');
|
|
},
|
|
|
|
/* 字母 */
|
|
letter(rule, value, callback) {
|
|
validateFn('letter', rule, value, callback, '包含非字母字符');
|
|
},
|
|
|
|
/* 字母和数字 */
|
|
letterAndNumber(rule, value, callback) {
|
|
validateFn('letterAndNumber', rule, value, callback, '只能输入字母或数字');
|
|
},
|
|
|
|
/* 手机号码 */
|
|
mobilePhone(rule, value, callback) {
|
|
validateFn('mobilePhone', rule, value, callback, '手机号码格式有误');
|
|
},
|
|
|
|
/* 字母开头,仅可包含数字 */
|
|
letterStartNumberIncluded(rule, value, callback) {
|
|
validateFn('letterStartNumberIncluded', rule, value, callback, '必须以字母开头,可包含数字');
|
|
},
|
|
|
|
/* 禁止中文输入 */
|
|
noChinese(rule, value, callback) {
|
|
validateFn('noChinese', rule, value, callback, '不可输入中文字符');
|
|
},
|
|
|
|
/* 必须中文输入 */
|
|
chinese(rule, value, callback) {
|
|
validateFn('chinese', rule, value, callback, '只能输入中文字符');
|
|
},
|
|
|
|
/* 电子邮箱 */
|
|
email(rule, value, callback) {
|
|
validateFn('email', rule, value, callback, '邮箱格式有误');
|
|
},
|
|
|
|
/* URL网址 */
|
|
url(rule, value, callback) {
|
|
validateFn('url', rule, value, callback, 'URL格式有误');
|
|
},
|
|
|
|
regExp(rule, value, callback) {
|
|
if (validateNull(value) || value.length <= 0) {
|
|
callback();
|
|
return;
|
|
}
|
|
|
|
const pattern = new RegExp(rule.regExp);
|
|
|
|
if (!pattern.test(value)) {
|
|
const errTxt = rule.errorMsg || 'invalid value';
|
|
callback(new Error(errTxt));
|
|
} else {
|
|
callback();
|
|
}
|
|
},
|
|
};
|
|
|
|
/**
|
|
* @desc [自定义校验规则]
|
|
* @example
|
|
* import { validateRule } from "@/utils/validateRules";
|
|
* rules: [
|
|
* { validator: validateRule.emailValue, trigger: 'blur'}
|
|
* ]
|
|
*/
|
|
|
|
export const getRegExp = function (validatorName) {
|
|
const commonRegExp = {
|
|
number: '^[-]?\\d+(\\.\\d+)?$',
|
|
letter: '^[A-Za-z]+$',
|
|
letterAndNumber: '^[A-Za-z0-9]+$',
|
|
mobilePhone: '^[1][3-9][0-9]{9}$',
|
|
letterStartNumberIncluded: '^[A-Za-z]+[A-Za-z\\d]*$',
|
|
noChinese: '^[^\u4e00-\u9fa5]+$',
|
|
chinese: '^[\u4e00-\u9fa5]+$',
|
|
email: '^([-_A-Za-z0-9.]+)@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$',
|
|
url: '(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'
|
|
};
|
|
return commonRegExp[validatorName];
|
|
};
|
|
|
|
const validateFn = (validatorName, rule, value, callback, defaultErrorMsg) => {
|
|
if (validateNull(value) || value.length <= 0) {
|
|
callback();
|
|
return;
|
|
}
|
|
|
|
const reg = new RegExp(getRegExp(validatorName));
|
|
|
|
if (!reg.test(value)) {
|
|
const errTxt = rule.errorMsg || defaultErrorMsg;
|
|
callback(new Error(errTxt));
|
|
} else {
|
|
callback();
|
|
}
|
|
};
|
|
|