/*
* @Descripttion: 通用验证工具函数
* @version: 1.0.0
* @Author: YouHuJun
* @Date: 2021-05-23 15:19:35
* @LastEditors: YouHuJun
* @LastEditTime: 2025-12-19 15:05:15
*/
/**
* 验证是否是数字
* @param {any} number 要验证的数字(支持数字/字符串类型)
* @returns {boolean} 验证结果
*/
export function validNumber(number: any): boolean {
// 显式转为字符串,解决number转string的类型报错
const numStr = String(number);
const numberReg = /^[0-9]{1,}$/;
return numberReg.test(numStr);
}
/**
* 验证账号
* @param {any} account 要验证的账号
* @returns {boolean} 验证结果
*/
export function validAccount(account: any): boolean {
const accountStr = String(account);
// 不能有点和空白 验证账号 4-30位
const oneNameReg = /^[a-zA-Z0-9_\u4e00-\u9fa5·]{4,30}$/; // 移除\\s(空白),原正则已限制无空白
// 空白/下划线首尾/连续下划线
const twoNameReg = /(^_)|(__)|(_$)/;
// 纯数字(修正原正则:^\d+$ 匹配纯数字)
const threeNameReg = /^\d+$/;
const resOne = oneNameReg.test(accountStr);
const resTwo = twoNameReg.test(accountStr);
const resThree = threeNameReg.test(accountStr);
return resOne && !resTwo && !resThree;
}
/**
* 验证手机号
* @param {any} phone 要验证的手机号
* @returns {boolean} 验证结果
*/
export function validPhone(phone: any): boolean {
const phoneStr = String(phone);
const reg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
return reg.test(phoneStr);
}
/**
* 验证手机验证码(4位数字)
* @param {any} code 验证码
* @returns {boolean} 验证结果
*/
export function validCode(code: any): boolean {
const codeStr = String(code);
const reg = /^\d{4}$/;
return reg.test(codeStr);
}
/**
* 验证邮箱
* @param {any} email 要验证的邮箱
* @returns {boolean} 验证结果
*/
export function validEmail(email: any): boolean {
const emailStr = String(email);
const reg = /^[a-zA-Z0-9_]+@([a-zA-Z0-9]+\.){1,2}[a-z]{2,3}$/;
return reg.test(emailStr);
}
/**
* 验证密码(6-15位,必须包含字母+数字,可含特殊字符)
* @param {any} password 要验证的密码
* @returns {boolean} 验证结果
*/
export function validPassword(password: any): boolean {
const pwdStr = String(password);
const reg = /(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9-*/+.~!@#$%^&*()]{6,15}$/;
return reg.test(pwdStr);
}
/**
* 验证身份证号
* @param {any} idNumber 身份证号
* @returns {boolean} 验证结果
*/
export function validIdNumber(idNumber: any): boolean {
const idStr = String(idNumber);
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return reg.test(idStr);
}
/**
* 验证地址信息(1-50位,中文/字母/数字/下划线)
* @param {any} addressInfo 地址信息
* @returns {boolean} 验证结果
*/
export function validAddressInfo(addressInfo: any): boolean {
const addrStr = String(addressInfo);
const reg = /^[\u4e00-\u9fa5\w]{1,50}$/;
return reg.test(addrStr);
}
/**
* 验证是否为外部链接(http/https/mailto/tel)
* @param {any} path 链接地址
* @returns {boolean} 验证结果
*/
export function isExternal(path: any): boolean {
const pathStr = String(path);
return /^(https?:|mailto:|tel:)/.test(pathStr);
}
/**
* 验证用户名(仅支持admin/editor)
* @param {any} str 用户名
* @returns {boolean} 验证结果
*/
export function validUsername(str: any): boolean {
const strTrim = String(str).trim();
const validMap = ['admin', 'editor'];
// UTS适配:用includes替代indexOf(更兼容)
return validMap.includes(strTrim);
}
/**
* 验证是否为合法URL
* @param {any} url URL地址
* @returns {boolean} 验证结果
*/
export function validURL(url: any): boolean {
const urlStr = String(url);
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.,?'\\+&%$#=~_-]+))*$/;
return reg.test(urlStr);
}
/**
* 验证是否为纯小写字母
* @param {any} str 要验证的字符串
* @returns {boolean} 验证结果
*/
export function validLowerCase(str: any): boolean {
const strTrim = String(str).trim();
const reg = /^[a-z]+$/;
return reg.test(strTrim);
}
/**
* 验证是否为纯大写字母
* @param {any} str 要验证的字符串
* @returns {boolean} 验证结果
*/
export function validUpperCase(str: any): boolean {
const strTrim = String(str).trim();
const reg = /^[A-Z]+$/;
return reg.test(strTrim);
}
/**
* 验证是否为纯字母(大小写)
* @param {any} str 要验证的字符串
* @returns {boolean} 验证结果
*/
export function validAlphabets(str: any): boolean {
const strTrim = String(str).trim();
const reg = /^[A-Za-z]+$/;
return reg.test(strTrim);
}
/**
* 验证是否为字符串类型
* @param {any} str 要验证的值
* @returns {boolean} 验证结果
*/
export function isString(str: any): boolean {
// UTS适配:简化类型判断,避免instanceof String
return typeof str === 'string';
}
/**
* 验证是否为数组类型
* @param {any} arg 要验证的值
* @returns {boolean} 验证结果
*/
export function isArray(arg: any): boolean {
// UTS原生支持Array.isArray,移除Object依赖
return Array.isArray(arg);
}