- 必填
export const required = (rule: string, value: string | number, callback: any) => {
if ((!value || !value.toString().trim()) && value !== 0 && value !== "0") {
callback(new Error("必填"));
}
return callback();
};
- 正整数
export const positiveIntegerChecker = (rule: any, value: any, callback: any) => {
let regex = /^\+?[1-9][0-9]*$/;
if (!value) {
return callback();
}
if (regex.test(value)) {
return callback();
}
callback(new Error("只能输入正整数"));
};
- 正整数+0
export const nonnegativeIntegerChecker = (rule: any, value: any, callback: any) => {
let regex = /^([1-9][0-9]*|0)$/;
if (!value) {
return callback();
}
if (regex.test(value)) {
return callback();
}
callback(new Error("只能输入非负整数"));
};
- 正整数和正小数
export const positiveNumberChecker = (rule: any, value: any, callback: any) => {
const regex = /^(([1-9]\d*)|0)(\.\d*)?$/;
if (!value) {
return callback();
}
if (value && !isNaN(value) && value > 0 && regex.test(value)) {
return callback();
}
callback(new Error("只能输入正整数或正小数"));
};
- 小数校验,严格控制小数位
export const floatNumberChecker = (rule: any, value: any, callback: any, integer: number, decimal: number) => {
if (!value) {
return callback();
}
const regex = /^(([1-9]\d*)|0)(\.\d*)?$/;
const parts = (value + "").split(".");
if (parts && parts.length === 1 && regex.test(value)) {
if (parts[0].length <= integer) {
return callback();
}
}
if (parts && parts.length === 2 && regex.test(value)) {
if (parts[1].length === 0) {
callback(new Error(i18n.t("validator.floatNumberError")));
}
if (parts[0].length <= integer && parts[1].length <= decimal) {
return callback();
}
}
callback(new Error(`最多${integer}位整数,${decimal}位小数`));
};
- 小数校验,严格控制小数位
export const floatNumberCheckerDecimal = (rule: any, value: any, callback: any, decimal: number) => {
const regex = /^(([1-9]\d*)|0)(\.\d*)?$/;
const parts = (value + "").split(".");
if (!value) {
return callback();
}
if (regex.test(value)) {
if (parts && parts.length === 2) {
if (parts[1].length <= decimal) {
return callback();
}
} else {
return callback();
}
}
callback(new Error(`最多支持${decimal}位小数`));
};
- 长度不能大于maxLength
export const maxLengthChecker = (rule: any, value: any, callback: any, maxLength: number) => {
if (typeof value === "number") {
value = value + "";
}
if (!value || (value && value.length <= maxLength)) {
return callback();
}
callback(new Error(`长度不能大于${maxLength}`));
};
- 长度只能是length
export const equalNumberChecker = (rule: any, value: any, callback: any, length: number) => {
if (typeof value === "number") {
value = value + "";
}
if (!value || (value && value.length === length)) {
return callback();
}
callback(new Error(`长度只能等于${length}`));
};
- 只能输入数字
export const numberOnlyChecker = (rule: any, value: any, callback: any) => {
let regex = /^[0-9]*$/;
if (value && !regex.test(value)) {
callback(new Error("只能输入数字"));
}
return callback();
};
- 数值不能大于
export const maxNumberChecker = (rule: any, value: any, callback: any, maxNumber: number) => {
if (!value || (value && Number(value) <= maxNumber)) {
return callback();
}
callback(new Error(`不能超过${max}`));
};
- 数值范围限制
export const numberRangeChecker = (rule: any, value: any, callback: any, minNumber: number, maxNumber: number) => {
if (!value || (value && Number(value) <= maxNumber && Number(value) >= minNumber)) {
return callback();
}
callback(new Error(`值的范围需要在 ${min} 和 ${max} 之间`));
};
- 只能输入数字和英文
export const numberCommaOnlyChecker = (rule: any, value: any, callback: any) => {
let regex = /^[0-9,]*$/;
if (value && !regex.test(value)) {
callback(new Error("只能输入数字和英文逗号"));
}
return callback();
};
- 校验为合法名称-字母、数字、下划线
export const nameValidate = (rule: string, value: string, callback: any) => {
const reg = /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/;
if (value && !reg.test(value)) {
callback(new Error("只支持字母数字和下划线"));
}
return callback();
};
- 校验为合法名称-字母、数字
export const numberLetterValidate = (rule: string, value: string, callback: any) => {
const reg = /^[a-zA-Z0-9]+$/;
if (value && !reg.test(value)) {
callback(new Error("只能输入字母和数字"));
}
return callback();
};
- 字母、数字、空格、#、中划线、+、下划线校验
export const letterNumberWithSpecialCharsValidate = (rule: string, value: string, callback: any) => {
const reg = /^[a-zA-Z0-9\s#\-_+]+$/;
if (value && !reg.test(value)) {
callback(new Error("**只能输入字母、数字、空格、‘#’、‘-’、‘+’ 和 ‘_’**"));
}
return callback();
};
- 校验为合法名称-特殊字符
export const htmlArrowCharter = (rule: string, value: string, callback: any) => {
const regExp = /[<>]/im;
if (regExp.test(value)) {
callback(new Error("不能输入<>"));
}
return callback();
};
- 不能输入中文
export const noChineseChecker = (rule: any, value: any, callback: any) => {
const regex = /^[\x00-\xff]*$/;
if (!value) {
return callback();
}
if (value && regex.test(value)) {
return callback();
}
callback(new Error("不能输入中文");
};
- 数组必填校验
export const requiredArr = (rule: string, value: Array<number>, callback: any) => {
if (!value || !value.length) {
callback(new Error("必填"));
}
return callback();
};
- 身份证验证
export const idCardChecker = (rule: string, value: string, callback: any) => {
const reg = /^[xX0-9]+$/;
if (value && !reg.test(value)) {
callback(new Error("只支持数字和字母X"));
}
return callback();
};
- 手机号合法校验
export const phoneValidate = (rule: string, value: string, callback: any) => {
const reg = /^[1]([3-9])[0-9]{9}$/;
if (value && !reg.test(value)) {
callback(new Error("请输入正确的11位手机号格式");
}
return callback();
};
- 邮箱地址合法校验
export const emailValidateWith = (rule: string, value: string, callback: any) => {
const reg = /^([A-Za-z*0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
if (value && !reg.test(value)) {
callback(new Error("请输入正确的邮箱格式");
}
return callback();
};
- 校验表情符
export const emojiChecker = (rule: any, value: any, callback: any) => {
let hasEmoji = (substring: string) => {
for (let i = 0; i < substring.length; i++) {
let hs = substring.charCodeAt(i);
if (0xd800 <= hs && hs <= 0xdbff) {
if (substring.length > 1) {
let ls = substring.charCodeAt(i + 1);
let uc = (hs - 0xd800) * 0x400 + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f) {
return true;
}
}
} else if (substring.length > 1) {
let ls = substring.charCodeAt(i + 1);
if (ls === 0x20e3) {
return true;
}
} else if (0x2100 <= hs && hs <= 0x27ff) {
return true;
} else if (0x2b05 <= hs && hs <= 0x2b07) {
return true;
} else if (0x2934 <= hs && hs <= 0x2935) {
return true;
} else if (0x3297 <= hs && hs <= 0x3299) {
return true;
} else if (
hs === 0xa9 ||
hs === 0xae ||
hs === 0x303d ||
hs === 0x3030 ||
hs === 0x2b55 ||
hs === 0x2b1c ||
hs === 0x2b1b ||
hs === 0x2b50
) {
return true;
}
}
};
if (hasEmoji(value)) {
callback(new Error("不能输入emoji表情"));
}
return callback();
};
- 链接http或https
export const urlChecker = (rule: any, value: string, callback: any) => {
const reg = /(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?/;
if (value && !reg.test(value)) {
return callback(new Error("请输入正确跳转链接(pc端)"));
}
return callback();
};