【发布时间】:2022-01-12 13:48:29
【问题描述】:
我在 JavaScript 中使用正则表达式验证日期,但是当我运行 SonarQube 进行代码分析时。它将正则表达式显示为安全漏洞。
示例 1:
下面是正则表达式模式(链接到正则表达式的来源https://stackoverflow.com/a/15504877/13353721):
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
示例 2:
对于浮动值,我使用了下面的正则表达式
^\d{1,5}(?:\.\d{1,5})?$
SonarQube 抛出了同样的安全错误,我尝试了各种不同的正则表达式模式,但它不起作用。
【问题讨论】:
-
根据this Sonarsource documenation,此规则标记任何硬编码正则表达式的执行,该正则表达式具有至少 3 个字符和至少两个以下任何字符的实例:
*+{.我>。因此,您必须确保您的模式符合规则。 -
@WiktorStribiżew 对于我使用momentjs的日期,它现在正在工作,但浮动不工作,我必须做些什么改变你能建议吗?
-
好吧,从错误描述来看,尝试通过变量构建它,
var d = "\\d{1,5}"; var float_rx = new RegExp("^" + d + "(?:\\." + d + ")?$") -
@WiktorStribiżew 谢谢你的回复,如果我这样创建 var d = "^\d{1,5}(?:\.\d{1,5})?$"; var float_rx = new RegExp(d) 它也在工作我不知道它是如何工作的。
标签: javascript regex sonarqube