# 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} */ 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(); }; ``` ####