2026-07-25 18:00:22 +08:00
|
|
|
/**
|
|
|
|
|
* 表单正则校验工具
|
|
|
|
|
*
|
|
|
|
|
* 只导出纯正则常量与独立的校验函数,不做任何 antd/framework 耦合。
|
|
|
|
|
* 各页面的 Form.Item rules 应在对应页面目录的 controller.ts 中组装。
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// ============================================================
|
|
|
|
|
// 正则常量
|
|
|
|
|
// ============================================================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 中国大陆手机号
|
|
|
|
|
* - 11 位数字,第二位 3-9
|
|
|
|
|
*/
|
|
|
|
|
export const CHINA_PHONE_REGEX = /^1[3-9]\d{9}$/;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 登录密码
|
|
|
|
|
* - 至少 8 位,同时包含字母与数字
|
|
|
|
|
* - 允许特殊字符 !@#$%^&*()_+-=
|
|
|
|
|
*/
|
|
|
|
|
export const LOGIN_PASSWORD_REGEX = /^(?=.*[A-Za-z])(?=.*\d)[\w!@#$%^&*()_+\-=]{8,}$/;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 真实姓名(中文/英文/数字,1-8 位)
|
|
|
|
|
*/
|
|
|
|
|
export const REAL_NAME_REGEX = /^[\u4e00-\u9fa5A-Za-z0-9·]{1,8}$/;
|
|
|
|
|
|
2026-08-06 09:23:18 +08:00
|
|
|
/**
|
|
|
|
|
* 图片 MIME 类型前缀
|
|
|
|
|
* - 用于上传前校验文件是否为图片
|
|
|
|
|
*/
|
|
|
|
|
export const IMAGE_TYPE_REGEX = /^image\//;
|
|
|
|
|
|
2026-07-25 18:00:22 +08:00
|
|
|
// ============================================================
|
|
|
|
|
// 校验函数
|
|
|
|
|
// ============================================================
|
|
|
|
|
|
|
|
|
|
/** 校验中国大陆手机号 */
|
|
|
|
|
export function isChinaPhone(value: unknown): boolean {
|
|
|
|
|
return typeof value === 'string' && CHINA_PHONE_REGEX.test(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** 校验密码:至少 8 位 + 同时含字母与数字 */
|
|
|
|
|
export function isValidPassword(value: unknown): boolean {
|
|
|
|
|
return typeof value === 'string' && LOGIN_PASSWORD_REGEX.test(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** 校验真实姓名:1-8 个字符 */
|
|
|
|
|
export function isValidRealName(value: unknown): boolean {
|
|
|
|
|
return typeof value === 'string' && value.length > 0 && REAL_NAME_REGEX.test(value);
|
|
|
|
|
}
|
2026-08-06 09:23:18 +08:00
|
|
|
|
|
|
|
|
/** 校验文件是否为图片类型 */
|
|
|
|
|
export function isImageFile(file: { type: string }): boolean {
|
|
|
|
|
return IMAGE_TYPE_REGEX.test(file.type);
|
|
|
|
|
}
|