9433cfb9创建于 2025年12月31日历史提交
/*
 * @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);
}