重构(后台表单):整数解析收敛到单一内部 helper
- 新增 parseSafeIntegerText 统一十进制校验,四个导出函数改为薄包装 - 注明 parsePositiveIntegerOrZero / parseNonNegativeIntegerOrZero 语义等价
This commit is contained in:
@@ -32,26 +32,26 @@ export function formatUnknownJson(value: unknown) {
|
||||
}
|
||||
}
|
||||
|
||||
/** 严格解析正安全整数:空串、小数、科学计数法、非十进制、非正数与非数字都返回 `null`。 */
|
||||
export function parsePositiveInteger(value: string): number | null {
|
||||
/** 内部共用:只接受纯十进制数字串(允许前后空白),拒绝小数、科学计数法与非法 token。 */
|
||||
function parseSafeIntegerText(value: string): number | null {
|
||||
const trimmed = value.trim();
|
||||
// 中文注释:只接受纯十进制数字串,避免 `Number` 把 `1.0` / `1e2` / `0x10` / `+5` 当成整数。
|
||||
if (!/^\d+$/.test(trimmed)) {
|
||||
return null;
|
||||
}
|
||||
const parsed = Number(trimmed);
|
||||
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;
|
||||
return Number.isSafeInteger(parsed) ? parsed : null;
|
||||
}
|
||||
|
||||
/** 严格解析正安全整数:空串、小数、科学计数法、非十进制、非正数与非数字都返回 `null`。 */
|
||||
export function parsePositiveInteger(value: string): number | null {
|
||||
const parsed = parseSafeIntegerText(value);
|
||||
return parsed !== null && parsed > 0 ? parsed : null;
|
||||
}
|
||||
|
||||
/** 严格解析非负安全整数:空串、小数、科学计数法、非十进制、负数与非数字都返回 `null`。 */
|
||||
export function parseNonNegativeInteger(value: string): number | null {
|
||||
const trimmed = value.trim();
|
||||
// 中文注释:只接受纯十进制数字串,避免 `Number` 把 `1.0` / `1e2` / `0x10` / `+5` 当成整数。
|
||||
if (!/^\d+$/.test(trimmed)) {
|
||||
return null;
|
||||
}
|
||||
const parsed = Number(trimmed);
|
||||
return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : null;
|
||||
return parseSafeIntegerText(value);
|
||||
}
|
||||
|
||||
/** 落库用宽松解析:非法输入按 `0` 处理,避免后台保存被输入抖动打断。 */
|
||||
@@ -59,7 +59,10 @@ export function parsePositiveIntegerOrZero(value: string): number {
|
||||
return parsePositiveInteger(value) ?? 0;
|
||||
}
|
||||
|
||||
/** 落库用宽松解析:非法输入按 `0` 处理,避免后台保存被输入抖动打断。 */
|
||||
/** 落库用宽松解析:非法输入按 `0` 处理,避免后台保存被输入抖动打断。
|
||||
*
|
||||
* 与 [`parsePositiveIntegerOrZero`] 行为一致(`0` 与非法输入都落到 `0`),保留独立名字只为让调用点
|
||||
* 表达业务语义;真正的整数解析统一走 [`parseSafeIntegerText`]。 */
|
||||
export function parseNonNegativeIntegerOrZero(value: string): number {
|
||||
return parseNonNegativeInteger(value) ?? 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user