【问题标题】:Regex validation fails on sonarqube正则表达式验证在 sonarqube 上失败
【发布时间】:2020-11-21 01:58:06
【问题描述】:

我对特殊字符有以下正则表达式验证:

.match(/[`~!@#\$%\^&\*\(\)\-=_\\\[\]{}/\?,\.\<\>]/)

它可以工作,但它没有通过 sonarqube,我收到一个安全热点错误:

“根据输入字符串评估正则表达式可能是一项极其耗费 CPU 的任务。特制的正则表达式(例如 (a+)+s)将需要几秒钟来评估输入字符串。

问题在于,输入中每增加一个字符,计算正则表达式所需的时间就会加倍。但是,等效的正则表达式 a+s(没有分组)可以在毫秒内高效计算,并随输入大小线性缩放。”

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您要消除所有特殊字符吗?为什么不使用 \W ? `
  • hmm 也许我只能限制 # / \ ,这些让我很麻烦..我不明白 /W ?
  • W 匹配所有非数字和非文字字符,所以所有特殊字符
  • 我现在尝试了 /W,但不适用于 # / \ 个字符
  • 您不需要在[] 字符类定义中屏蔽(以“\”开头)所有字符。也许你不屏蔽(和)会得到更好的结果?

标签: javascript sonarqube


【解决方案1】:

回答@Greedo:“是的,我确定。”在字符类中,如果将“-”放在字符列表的末尾,则只需要屏蔽右方括号和反斜杠。以下是可行的,但我不知道 Sonarqube 会如何响应。

let res="[`~!@#$%^&*)(=_\\[]{}/?,.<>-]".match(/[`~!@#$%^&*)(=_\\[\]{}/?,.<>-]/g);

console.log(res);

【讨论】:

  • 仍然没有通过声纳,但我已经设法找到了解决方案。感谢您的宝贵时间和帮助
  • 值得一提的是:Sonarqube 消息指的是 RegExp 模式中的分组。这里没有分组,消息很可能出现,因为 Sonarqube 解析器误解了字符列表中包含的括号。
  • 我认为你是对的,谢谢你的澄清。
【解决方案2】:

我设法找到了解决方案,将正则表达式验证限制为某些字符,例如 #、/、\,现在可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多