/** * 表单校验纯函数:手机号 / 短信验证码。 * * 单一来源:页面与 API 层都从这里取规则,避免同一正则被复制到多处后各自分叉 * (此前 `/^1\d{10}$/` 在页面与接口层各有一份,验证码长度规则散落 4 处且不一致)。 */ /** 短信验证码最小长度 */ export const SMS_CODE_MIN_LENGTH = 4; /** 短信验证码最大长度(部分通道下发 6 位) */ export const SMS_CODE_MAX_LENGTH = 6; /** 中国大陆手机号:1 开头共 11 位数字 */ export const PHONE_RE = /^1\d{10}$/; /** 短信验证码:4–6 位数字 */ export const SMS_CODE_RE = /^\d{4,6}$/; /** 邮箱:本地部分@域名,域名至少含一个点且后缀为 2 位以上字母(明显笔误拦在本地,真实性由后端验证) */ export const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[A-Za-z]{2,}$/; /** * 校验手机号是否为合法的大陆号码。 * @param phone 手机号 * @returns 合法返回 true */ export function isValidPhone(phone: string): boolean { return PHONE_RE.test(phone); } /** * 校验短信验证码格式(纯数字、4–6 位)。 * 只做格式校验,正确性由后端判定。 * @param code 验证码 * @returns 合法返回 true */ export function isValidSmsCode(code: string): boolean { return SMS_CODE_RE.test(code.trim()); } /** * 校验邮箱格式。只拦明显笔误,不做 DNS / 可达性验证(由后端判定)。 * @param email 邮箱 * @returns 合法返回 true */ export function isValidEmail(email: string): boolean { return EMAIL_RE.test(email.trim()); }