Last active
September 23, 2020 09:00
-
-
Save gooqiao/860b428480b0418238265b0921a1877d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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"; | |
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