You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数字缩写还原函数格式校验缺陷及优化需求

优化数字缩写还原函数的格式校验逻辑

原函数的核心问题是未对输入格式做严格校验,仅通过粗暴过滤字符处理输入,导致不符合数字+缩写字母规范的内容也能被错误处理。我们可以通过正则表达式精准匹配合法格式,在处理前完成严格校验,具体优化方案如下:

优化后的代码

const abbr = require('./numberAbbreviates.json');

function unabbreviate(input) {
    // 输入类型校验
    if (typeof input !== 'string') {
        return new Error('Paramentro deve ser do tipo String.');
    }

    // 匹配合法格式:开头为整数/小数,后续可选多字符缩写字母,整个字符串需完全匹配
    const validPattern = /^(\d+(\.\d+)?)([A-Za-z]+)?$/;
    const matchResult = input.match(validPattern);

    // 格式不合法直接返回错误
    if (!matchResult) {
        return new Error('Entrada inválida: formato deve ser "número+sigla" (ex: 1.5k) ou apenas número.');
    }

    const [, numStr, , abbrStr] = matchResult;
    const number = Number(numStr);

    // 校验数字有效性
    if (isNaN(number)) {
        return new Error('Número inválido na entrada.');
    }

    // 无缩写的纯数字情况,直接返回数值
    if (!abbrStr) {
        return number;
    }

    // 统一转大写匹配配置项(兼容小写输入)
    const upperAbbr = abbrStr.toUpperCase();
    // 缩写未配置则返回错误
    if (!abbr[upperAbbr]) {
        return new Error(`Sigla "${upperAbbr}" não está configurada.`);
    }

    // 合法情况计算并返回结果
    return number * abbr[upperAbbr];
}

关键优化点

  • 严格格式校验:使用正则^(\d+(\.\d+)?)([A-Za-z]+)?$确保输入只能是「纯数字」或「数字+缩写字母」的格式,拒绝任何多余字符(如@1.55@k)和字母前置的情况(如k1.5)。
  • 精准内容提取:通过正则捕获组分别提取数字和缩写部分,避免原函数粗暴过滤字符导致的逻辑混乱。
  • 大小写兼容:将输入的缩写统一转大写后匹配配置,支持小写输入(如1.5k自动匹配K配置)。
  • 明确错误反馈:针对不同非法场景返回对应错误信息,便于调试和异常处理。

测试验证

// 合法输入
unabbreviate('1.5k'); // 1500
unabbreviate('1.55k'); // 1550
unabbreviate('123'); // 123
unabbreviate('45Qa'); // 45000000000000000

// 非法输入返回错误
unabbreviate('k1.5'); // Error: Entrada inválida...
unabbreviate('@1.55@k'); // Error: Entrada inválida...
unabbreviate('123abc'); // Error: Sigla "ABC" não está configurada.
unabbreviate(''); // Error: Número inválido na entrada.

内容的提问来源于stack exchange,提问作者VK_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:40:08