Skip to content

Instantly share code, notes, and snippets.

@gooqiao
Last active September 23, 2020 09:00
Show Gist options
  • Save gooqiao/860b428480b0418238265b0921a1877d to your computer and use it in GitHub Desktop.
Save gooqiao/860b428480b0418238265b0921a1877d to your computer and use it in GitHub Desktop.
/* eslint-disable @typescript-eslint/no-explicit-any */
const validate = {
int: "整数格式",
number: "数字格式",
double: "浮点数格式",
require: "必填",
};
const itValidate = (key: keyof typeof validate) => {
return validate[key];
};
import { RuleItem } from "async-validator";
// email
export const RegEmail = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
// url
export const RegURL = /[a-zA-z]+:\/\/[^\s]*/;
// yyyy-MM-dd 格式的日期.
export const RegDate = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
// 密码格式
export const RegPassword = /^[\w!@#$%^&*./|\\]{6,20}$/;
// 外链
export const RegExternal = /^(https?:|mailto:|tel:)/;
// 数字格式
export const RegNumber = /^-?\d+(\.\d+)?$/;
// 整数
export const RegInt = /^-?\d+$/;
// 浮点数
export const RegDouble = /^-?\d+\.\d+$/;
// 字母
export const RegLetter = /^[A-Za-z]+$/;
// 字母
export const ReglowerCaseLetter = /^[a-z]+$/;
export function isEmpty(v: any): boolean {
if (v === null || v === undefined) return true;
if (Array.isArray(v) && v.length === 0) return true;
if (typeof v === "string" && v === "") return true;
return false;
}
export function isNotEmpty(v: unknown): boolean {
return !isEmpty(v);
}
export function isEmail(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegEmail.test(v);
}
export function isURL(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegURL.test(v);
}
export function isDateStr(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegDate.test(v);
}
export function isPassword(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegPassword.test(v);
}
export function isExternal(v: unknown) {
if (typeof v !== "string" || v === "") return false;
return RegExternal.test(v);
}
export function isNumber(v: unknown): boolean {
if (typeof v === "number") return true;
if (typeof v !== "string" || v === "") return false;
return RegNumber.test(v);
}
export function isInt(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegInt.test(v);
}
export function isDouble(v: unknown): boolean {
if (typeof v !== "string" || v === "") return false;
return RegDouble.test(v);
}
// 以下主要是ElementUI的表单校验
export function validateRequire(
_: unknown,
v: unknown,
callback: validateCallback
) {
return callback(isNotEmpty(v) ? undefined : itValidate("require"));
}
type ValidatorParams = Parameters<Required<RuleItem>["validator"]>;
type validateCallback = ValidatorParams[2];
export function validateNumber(
_: unknown,
v: unknown,
callback: validateCallback
) {
if (!v) return callback();
return callback(isNumber(v) ? undefined : itValidate("number"));
}
export function validateInt(
_: unknown,
v: unknown,
callback: validateCallback
) {
if (!v) return callback();
return callback(isInt(v) ? undefined : itValidate("int"));
}
export function validateDouble(
_: unknown,
v: unknown,
callback: validateCallback
) {
if (!v) return callback();
return callback(isDouble(v) ? undefined : itValidate("double"));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment