Template
1
0
mirror of https://github.com/un-pany/v3-admin-vite.git synced 2025-04-20 19:09:21 +08:00

perf: 代码优化 utils/validate

This commit is contained in:
pany 2023-06-07 12:38:58 +08:00
parent dfff053ae8
commit 246f29e8c3

View File

@ -1,24 +1,84 @@
/** 判断是否为数组 */
export const isArray = (arg: unknown) => {
return Array.isArray ? Array.isArray(arg) : Object.prototype.toString.call(arg) === "[object Array]"
}
/** 判断是否为字符串 */
export const isString = (str: unknown) => {
return typeof str === "string" || str instanceof String || false
}
/** 判断是否为外链 */
export const isExternal = (path: string) => {
const reg = /^(https?:|mailto:|tel:)/
return reg.test(path)
}
export const isArray = (arg: any) => {
if (typeof Array.isArray === "undefined") {
return Object.prototype.toString.call(arg) === "[object Array]"
}
return Array.isArray(arg)
}
export function isString(str: any) {
if (typeof str === "string" || str instanceof String) {
return true
}
return false
}
export const isValidURL = (url: string) => {
const reg =
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
/** 判断是否为网址(带协议) */
export const isUrl = (url: string) => {
const reg = /^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/
return reg.test(url)
}
/** 判断是否为网址或 IP带端口 */
export const isUrlPort = (url: string) => {
const reg = /^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/
return reg.test(url)
}
/** 判断是否为域名(不带协议) */
export const isDomain = (domain: string) => {
const reg = /^([0-9a-zA-Z-]{1,}\.)+([a-zA-Z]{2,})$/
return reg.test(domain)
}
/** 判断版本号格式是否为 X.Y.Z */
export const isVersion = (version: string) => {
const reg = /^\d+(?:\.\d+){2}$/
return reg.test(version)
}
/** 判断时间格式是否为 24 小时制HH:mm:ss */
export const is24H = (time: string) => {
const reg = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
return reg.test(time)
}
/** 判断是否为手机号1 开头) */
export const isPhoneNumber = (str: string) => {
const reg = /^(?:(?:\+|00)86)?1\d{10}$/
return reg.test(str)
}
/** 判断是否为第二代身份证18 位) */
export const isChineseIdCard = (str: string) => {
const reg = /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
return reg.test(str)
}
/** 判断是否为 Email支持中文邮箱 */
export const isEmail = (email: string) => {
const reg = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
return reg.test(email)
}
/** 判断是否为 MAC 地址 */
export const isMAC = (mac: string) => {
const reg =
/^(([a-f0-9][0,2,4,6,8,a,c,e]:([a-f0-9]{2}:){4})|([a-f0-9][0,2,4,6,8,a,c,e]-([a-f0-9]{2}-){4}))[a-f0-9]{2}$/i
return reg.test(mac)
}
/** 判断是否为 IPv4 地址 */
export const isIPv4 = (ip: string) => {
const reg =
/^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/
return reg.test(ip)
}
/** 判断是否为车牌(兼容新能源车牌) */
export const isLicensePlate = (str: string) => {
const reg =
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/
return reg.test(str)
}