8f57683dd5b66c1c73ec388d556e55ecfd359e4f
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
Languages
Vue
88.4%
JavaScript
7.2%
SCSS
4.4%