interface NumRule { min?: number; max?: number; minMsg?: string; maxMsg?: string; posMsg?: string; optional?: boolean; } interface ValidateResult { ok: boolean; message: string; } export function num(rule: NumRule) { return { safeParse(value: number | undefined): ValidateResult { if (value === undefined || value === null) { return rule.optional ? { ok: true, message: '' } : { ok: false, message: posMsg || '请输入有效数值' }; } if (isNaN(value)) return { ok: false, message: '请输入有效数值' }; if (rule.min !== undefined && value < rule.min) return { ok: false, message: rule.minMsg || `数值不能低于${rule.min}` }; if (rule.max !== undefined && value > rule.max) return { ok: false, message: rule.maxMsg || `数值不能高于${rule.max}` }; return { ok: true, message: '' }; }, }; } interface FieldRule { min?: number; max?: number; minMsg?: string; maxMsg?: string; optional?: boolean; } export function validateNum(value: number | undefined, label: string, rule: FieldRule): string | null { if (value === undefined || value === null) return rule.optional ? null : `${label}: 请输入有效数值`; if (isNaN(value)) return `${label}: 请输入有效数值`; if (rule.min !== undefined && value < rule.min) return `${label}: ${rule.minMsg ?? `数值不能低于${rule.min}`}`; if (rule.max !== undefined && value > rule.max) return `${label}: ${rule.maxMsg ?? `数值不能高于${rule.max}`}`; return null; } export function validateStr(value: string | undefined, maxLen: number, label: string): string | null { if (!value) return null; if (value.length > maxLen) return `${label}不能超过${maxLen}字`; return null; }