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

如何确认浮点数正则安全?解决ESLint unsafe-regex告警

德语格式浮点数正则触发ESLint安全规则的问题解答

是否可以忽略该规则?

不建议直接忽略,除非你能100%确认当前正则不存在ReDoS(正则表达式拒绝服务)风险。security/detect-unsafe-regex规则的作用是识别可能被恶意输入利用、导致程序挂起的正则表达式。如果确实要临时忽略,可以在正则表达式上方添加注释:

// eslint-disable-next-line security/detect-unsafe-regex
const pattern = /^[+-]?([0-9]+([,][0-9]*)?|[,][0-9]+)$/;

但优先推荐修复正则表达式以消除告警,避免潜在安全隐患。

如何修复正则表达式?

原正则的嵌套可选量词结构可能被ESLint规则误判为不安全。你可以重构正则,在保留原有匹配逻辑的前提下,消除嵌套的可选分组:

export const isFloat = (value: string) => {
    // 重构后的正则,避免嵌套可选分组
    const pattern = /^[+-]?(?:\d+,?\d*|,\d+)$/;
    return pattern.test(value);
};

这个重构后的正则依然能匹配所有合法的德语格式浮点数:

  • 整数:123、+456、-789
  • 带逗号的小数:123,45、,678、-90,12
  • 带尾随逗号的格式:123,、+456,

同时避免了可能触发ESLint告警的嵌套量词结构。

如何确认正则表达式是否安全?

  1. 检查正则结构:避免出现嵌套的重复量词(比如(a+)*),这类结构容易导致灾难性回溯。你的原正则虽然没有这类风险,但ESLint的规则可能对嵌套可选分组比较敏感。
  2. 测试极端输入:用超长的合法/非法输入测试正则的执行速度,比如重复输入大量数字或逗号,若测试能快速返回结果,说明不存在回溯风险。
  3. 分析正则逻辑:确保正则的各个分支是互斥的,不会让引擎为同一个输入尝试多种匹配路径。比如原正则中,\d+(?:,\d*)?和,\d+两个分支不会重叠,引擎无需回溯。

内容的提问来源于stack exchange,提问作者Ala Eddine Menai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:45:24