diff --git a/apps/admin-web/src/pages/pageUtils.ts b/apps/admin-web/src/pages/pageUtils.ts index ed90abdd9..d350a39aa 100644 --- a/apps/admin-web/src/pages/pageUtils.ts +++ b/apps/admin-web/src/pages/pageUtils.ts @@ -32,21 +32,25 @@ export function formatUnknownJson(value: unknown) { } } -/** 严格解析正安全整数:空串、小数、非正数与非数字都返回 `null`,用于表单校验。 */ +/** 严格解析正安全整数:空串、小数、科学计数法、非十进制、非正数与非数字都返回 `null`。 */ export function parsePositiveInteger(value: string): number | null { - if (value.trim() === '') { + const trimmed = value.trim(); + // 中文注释:只接受纯十进制数字串,避免 `Number` 把 `1.0` / `1e2` / `0x10` / `+5` 当成整数。 + if (!/^\d+$/.test(trimmed)) { return null; } - const parsed = Number(value); + const parsed = Number(trimmed); return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null; } -/** 严格解析非负安全整数:空串、小数、负数与非数字都返回 `null`,用于表单校验。 */ +/** 严格解析非负安全整数:空串、小数、科学计数法、非十进制、负数与非数字都返回 `null`。 */ export function parseNonNegativeInteger(value: string): number | null { - if (value.trim() === '') { + const trimmed = value.trim(); + // 中文注释:只接受纯十进制数字串,避免 `Number` 把 `1.0` / `1e2` / `0x10` / `+5` 当成整数。 + if (!/^\d+$/.test(trimmed)) { return null; } - const parsed = Number(value); + const parsed = Number(trimmed); return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : null; }