修正(后台表单):严格整数解析只接受纯十进制数字
- parsePositiveInteger / parseNonNegativeInteger 改用 ^\d+$ 校验原始字符串 - 拒绝 1.0、1e2、0x10、+5 等 Number 会隐式转换的写法,与'严格整数'注释一致
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user