Files
AIProd/README.md
2025-10-10 10:41:39 +08:00

120 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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