-
解决线上部署后,本地图片不显示的问题
-
字符串相加
-
验证手机号码是否合法
-
密码强度校验
-
用户名校验
-
邮箱验证
-
判断变量是否为空
-
防抖
-
深拷贝
-
文件转base64格式
//@ts-nocheck
/**
* 解决线上部署后,本地图片不显示的问题
* @param url
*/
export function xxzUtilsGetAssetsFile(url: any) {
return new URL(`../assets/images/${url}`, import.meta.url).href
}
/**
* 字符串相加
* @param num1
* @param num2
*/
export function xxzUtilsAddStrings(num1: string, num2: string) {
let i = num1.length - 1,//两个指针分别指向两个数的尾部
j = num2.length - 1,
carry = 0,//进位
ans = []
while (i >= 0 || j >= 0 || carry !== 0) {//判断指针是否到头
let c1 = i >= 0 ? num1.charAt(i) - '0' : 0,//没到头就转换成数字,到头就赋值为0
c2 = j >= 0 ? num2.charAt(j) - '0' : 0
let sum = c1 + c2 + carry
ans.unshift(sum % 10)//取余数,从队头放入res
carry = Math.floor(sum / 10)//重新设置进位
i--
j--
}
return ans.join('')//将数组连接成字符串
}
/**
* 验证手机号码是否合法
* 验证规则:11位数字,以1开头。
* 第二位不能是二,不能是0[3456789]
*/
export function xxzUtilsPhoneValidator(str: string): boolean {
const reg = /^1[3456789]\d{9}$/
// ^1 以1开头
// [3456789] 第2位,使用原子表里的任意一个原子都可以
// \d{9}$ 第三位 朝后可以是任意数字 并且最后结尾必须是数字
return reg.test(str)
}
/**
* 密码强度校验
* 8到16 英文大小写字母 , 数字,特殊符号组成
*/
export function xxzUtilsPassValidator(val: string): boolean {
const validator = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[.$@$!%*#?&])[^]{8,16}$/
return validator.test(val)
}
/**
* 用户名校验
* 由4-32位字母、数字、"_"和"-"组成
*/
export function xxzUtilsUsernameValidator(val: string): boolean {
const regex = /^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[_-]).{4,32}$/
return regex.test(val)
}
/**
* 邮箱验证
*/
export function xxzUtilsEmailValidator(email) {
const re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,6}$/
return re.test(email)
}
/**
* 判断变量是否为空
* @param value
*/
export function xxzUtilsIsEmpty(value: any): boolean {
if (value === undefined || value === null) {
return true
}
if (typeof value === 'string' && value.trim() === '') {
return true
}
if (Array.isArray(value) && value.length === 0) {
return true
}
if (typeof value === 'object' && Object.keys(value).length === 0) {
return true
}
return false
}
/**
* 防抖
*/
type CallbackFn = (item?: any) => void
let timer: any = null
export function xxzUtilsDebounce(Callback: CallbackFn, delay = 200) {
timer != null ? clearTimeout(timer) : null
timer = setTimeout(() => {
Callback && Callback() //当有值才会执行
}, delay)
}
/**
* 深拷贝
*/
export function xxzUtilsCloneDeep(source, hash = new WeakMap()) {
if (typeof source !== 'object' || source === null) {
return source
}
if (hash.has(source)) {
return hash.get(source)
}
const target = Array.isArray(source) ? [] : {}
Reflect.ownKeys(source).forEach(key => {
const val = source[key]
if (typeof val === 'object' && val !== null) {
target[key] = xxzUtilsCloneDeep(val, hash)
} else {
target[key] = val
}
})
hash.set(source, target)
return target
}
interface ConfigFile {
readonly lastModified: number;
readonly name: string;
readonly size: number;
readonly type: string;
arrayBuffer(): Promise<ArrayBuffer>;
slice(start?: number, end?: number, contentType?: string): Blob;
stream(): ReadableStream;
text(): Promise<string>;
}
/**
* 文件转base64格式
* @param file 文件类型
*/
export function xxzUtilsFileToBase64(file: ConfigFile) {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.readAsDataURL(file) // 一定要传入file格式
reader.onload = () => {
// console.log('file转base64结果:' + reader.result)
resolve(reader.result as any)
}
reader.onerror = function(error) {
// console.log('Error: ', error)
reject(error)
}
})
}