allinssl/frontend/packages/utils/docs/business.md

220 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 业务工具函数文档
这个模块提供了一系列用于业务处理的实用工具函数。该模块使用 Ramda.js 进行函数式编程,并提供了完整的 TypeScript 类型支持。
## 目录
1. [正则验证](#正则验证)
2. [业务操作](#业务操作)
3. [代理函数](#代理函数)
## 正则验证
### 邮箱验证
```typescript
isEmail(email: string): boolean
```
验证字符串是否为有效的邮箱地址。使用标准邮箱格式验证,要求包含 `@` 和域名。
### 手机号验证
```typescript
isPhone(phone: string): boolean
```
验证字符串是否为有效的中国大陆手机号。要求以 1 开头,第二位为 3-9总长度为 11 位。
### 身份证号验证
```typescript
isIdCard(idCard: string): boolean
```
验证字符串是否为有效的中国大陆身份证号。支持 18 位身份证号码验证,包含生日和校验位检查。
### URL验证
```typescript
isUrl(url: string): boolean
```
验证字符串是否为有效的URL。支持 http、https、ftp、rtsp、mms 等协议。
### IP地址验证
#### IPv4验证
```typescript
isIpv4(ip: string): boolean
```
验证字符串是否为有效的IPv4地址。每段数字范围为 0-255使用更精确的数字范围验证。
#### IPv6验证
```typescript
isIpv6(ip: string): boolean
```
验证字符串是否为有效的IPv6地址。支持以下格式
- 标准 IPv6 地址
- 压缩形式
- 混合形式
- IPv4 映射到 IPv6
- 特殊形式(如 fe80:: 链路本地地址)
#### 通用IP验证
```typescript
isIp(ip: string): boolean
```
验证字符串是否为有效的IP地址同时支持 IPv4 和 IPv6。
### IP段验证
```typescript
isIps(ips: string): boolean
```
验证字符串是否为有效的IP段。支持 CIDR 表示法,如 "192.168.1.0/24"。
### 端口验证
```typescript
isPort(port: string): boolean
```
验证字符串是否为有效的端口号。范围为 1-65535使用精确的数字范围验证。
### MAC地址验证
```typescript
isMac(mac: string): boolean
```
验证字符串是否为有效的MAC地址。格式为 XX-XX-XX-XX-XX-XX其中 X 为十六进制数字。
### 中文验证
```typescript
isChinese(str: string): boolean
```
验证字符串是否只包含中文字符。使用 Unicode 范围 \u4e00-\u9fa5 进行验证。
## 业务操作
### 手机号加密
```typescript
encryptPhone(phone: string): string
```
将手机号中间4位替换为星号。
示例:
```typescript
encryptPhone('13812345678') // 返回: '138****5678'
```
### 身份证号加密
```typescript
encryptIdCard(idCard: string): string
```
将身份证号中间4位替换为星号。
示例:
```typescript
encryptIdCard('440101199001011234') // 返回: '440101****1234'
```
### 版本号比较
```typescript
compareVersion(version1: string, version2: string): number
```
使用函数式编程方式比较两个版本号的大小。
- 返回 1: version1 > version2
- 返回 -1: version1 < version2
- 返回 0: version1 = version2
特点:
- 使用 Ramda.js pipe 函数进行函数组合
- 自动处理不同长度的版本号
- 支持任意深度的版本号比较
### 字节转换
```typescript
formatBytes(bytes: number, fixed?: number, isUnit?: boolean, endUnit?: string): string
formatBytesCurried(bytes: number)(fixed?: number, isUnit?: boolean, endUnit?: string): string
```
将字节数转换为可读的字符串,提供普通版本和柯里化版本。
参数:
- `bytes`: 要转换的字节数
- `fixed`: 保留小数位数,默认为 2
- `isUnit`: 是否显示单位,默认为 true
- `endUnit`: 指定结束单位,如果指定则转换到该单位为止
支持的单位:BKBMBGBTB
### 分页字符串转换
```typescript
formatPage(page: string): number
```
从特定格式的字符串中提取分页数量。使用正则表达式匹配 `class='Pcount'>共n条<` 格式的字符串。
## 代理函数
### 代理配置生成
```typescript
getProxyConfig(proxyKey: string, usage?: 'query' | 'params'): string | { request_time: number; request_token: string }
```
生成代理请求所需的配置信息。使用 MD5 加密生成请求令牌。
参数:
- `proxyKey`: 代理密钥
- `usage`: 使用场景
- 'params': 返回对象格式
- 'query': 返回查询字符串格式
返回值:
- params 格式: `{ request_time: number; request_token: string }`
- query 格式: `request_time=${time}&request_token=${token}`
## 特点
1. 使用 TypeScript 编写,提供完整的类型支持
2. 使用 Ramda.js 进行函数式编程
3. 提供柯里化版本的函数
4. 使用精确的正则表达式进行验证
5. 支持现代化的 IP 地址格式(包括 IPv6
## 注意事项
1. 所有正则验证函数都使用严格的匹配规则
2. 版本号比较支持任意深度的版本号格式
3. 字节转换函数支持自定义结束单位
4. 代理配置函数仅在开发环境下使用
5. 所有函数都经过优化,支持函数式编程范式