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

字符串比较失效排查及数据库插入前字符串标准化处理需求

解决疫苗名称统一格式化的问题

看起来你遇到的核心问题是字符串匹配和统一格式化没做好,导致各种类似的疫苗名称没法正确转换成统一的EP B。我来帮你优化makeUniform函数,搞定这些变体的匹配和替换。

优化后的makeUniform函数实现

这个函数会处理大小写差异、重音字符、不同缩写形式的变体,把所有目标字符串统一转换成EP B:

function makeUniform(vaccineName) {
  if (!vaccineName) return vaccineName; // 处理空值,避免报错

  // 第一步:统一转成大写,消除大小写差异
  let normalized = vaccineName.toUpperCase();

  // 第二步:移除重音标记(比如把á转成A,处理EpatiteáB这种特殊拼写)
  normalized = normalized.normalize("NFD").replace(/[\u0300-\u036f]/g, "");

  // 第三步:匹配所有目标变体,替换成统一的EP B
  // 覆盖Epatite、Epatite B、EPB3、EpatiteáB等所有情况
  const targetPattern = /^(EPATITE(?:\s*B)?|EPB\d*)$/;
  if (targetPattern.test(normalized)) {
    return "EP B";
  }

  // 不匹配目标变体的字符串,返回格式化后的原字符串(可根据需求调整)
  return normalized;
}

函数逻辑说明

  • 大小写统一:先把输入转成大写,不管用户输入的是epatite还是Epatite,都能统一匹配。
  • 重音处理:用normalize和正则移除重音标记,解决EpatiteáB这类带特殊字符的匹配问题。
  • 正则匹配:
    • EPATITE(?:\s*B)?:匹配EPATITE或EPATITE B(中间允许任意空格)
    • EPB\d*:匹配EPB后面跟任意数字的情况(比如EPB3)
    • 首尾的^和$确保是整个字符串匹配,避免部分匹配的误判。

测试验证

你可以测试这些输入,都会返回EP B:

  • Epatite
  • Epatite B
  • EpatiteáB
  • EpB3
  • epatite b(小写输入)

结合你的原有代码使用

直接替换makeUniform函数的实现即可,原有插入逻辑不需要改动:

// vaccines[index] 是待比较的字符串
var vac = makeUniform(vaccines[index]);
const queryInsert = {
  text: 'INSERT INTO coverages (vaccine) VALUES ($1) ON CONFLICT DO NOTHING;',
  values: [vac]
}
// 执行数据库插入操作...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:50