2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-10 10:41:39 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00
2025-10-10 10:41:39 +08:00
2025-10-24 15:45:38 +08:00
2025-10-10 10:41:39 +08:00
2025-10-10 10:41:39 +08:00
2025-10-24 15:45:38 +08:00
2025-10-10 10:41:39 +08:00
2025-10-24 15:45:38 +08:00
2025-10-10 10:41:39 +08:00
2025-10-24 15:45:38 +08:00
2025-10-24 15:45:38 +08:00

vue2-ssr-template

常用正则表达式

表单验证

/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/   // 邮箱
/^1[3-9]\d{9}$/                                  // 中国大陆手机号
const ID_REGEX = {
  mainland: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/, // 大陆身份证
  hongkong: /^[A-Z]{1,2}\d{6}\([0-9A]\)$/, // 香港身份证
  macau: /^[157]\/\d{6}\(\d\)$/, // 澳门身份证
  taiwan: /^[A-Z][0-9]{9}$/ // 台湾身份证
};
/^[a-zA-Z0-9]{6,20}$/                 // 6-20位数字或字母
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/ // 6-20位字母+数字组合

数字相关

/^\d+$/                // 纯数字(整数)
/^-?\d+$/               // 整数(含负数)
/^\d+(\.\d+)?$/         // 正数(整数 + 小数)
/^-?\d+(\.\d+)?$/       // 数字(整数 + 小数 + 负数)

字母 & 字符串

/^[a-zA-Z]+$/           // 纯英文
/^[A-Z]+$/              // 全大写
/^[a-z]+$/              // 全小写
/^[a-zA-Z0-9]+$/        // 英文 + 数字
/^[\u4e00-\u9fa5]+$/    // 纯中文

其它

/^\s+|\s+$/g                            // 去除首尾空格(配合 .replace 使用)
/[\u4e00-\u9fa5]/                       // 匹配中文字符
/^(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)){3}$/  // IPv4

常用工具函数

数字 & 字符串

export const clamp = (n, min, max) => Math.min(max, Math.max(min, n));  //将数值限制在 [min, max] 区间内
export const pad = (n, len = 2) => String(n).padStart(len, '0');      //左侧补0
export const capitalize = (s) => (isStr(s) && s ? s.charAt(0).toUpperCase() + s.slice(1) : '');  //单词首字母大写

时间格式化

/**
 * 按模板格式化日期YYYY-MM-DD HH:mm:ss
 * @param {Date|number|string} [date=new Date()]
 * @param {string} [fmt='YYYY-MM-DD HH:mm:ss']
 * @returns {string}
 */
export const formatDate = (date = new Date(), fmt = 'YYYY-MM-DD HH:mm:ss') => {
  const d = date instanceof Date ? date : new Date(date);
  const rep = {
    YYYY: d.getFullYear(),
    MM: pad(d.getMonth() + 1),
    DD: pad(d.getDate()),
    HH: pad(d.getHours()),
    mm: pad(d.getMinutes()),
    ss: pad(d.getSeconds()),
  };
  return fmt.replace(/YYYY|MM|DD|HH|mm|ss/g, (k) => String(rep[k]));
};

复制文本到剪贴板

/**
 * 复制文本到剪贴板(非安全上下文降级方案)
 * @param {string} text
 * @returns {Promise<void>|void}
 */
export const copyText = (text) => {
  if (typeof navigator !== 'undefined' && navigator.clipboard && window.isSecureContext) {
    return navigator.clipboard.writeText(text);
  }
  const ta = document.createElement('textarea');
  ta.value = text;
  ta.style.position = 'fixed';
  ta.style.opacity = '0';
  document.body.appendChild(ta);
  ta.select();
  document.execCommand('copy');
  ta.remove();
};

Description
No description provided
Readme 8.5 MiB
Languages
Vue 88.4%
JavaScript 7.2%
SCSS 4.4%