当前位置: 首页 > 知识库问答 >
问题:

sonarqube上的正则表达式验证失败

齐乐
2023-03-14

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

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

它的工作原理,但它不传递sonarqube,我得到一个安全热点错误:

"根据输入字符串评估正则表达式可能是一项极其消耗CPU的任务。巧尽心思构建的正则表达式(如(a)s)将需要几秒钟来计算输入字符串。

问题在于,每向输入中添加一个字符,计算正则表达式所需的时间就会加倍。但是,等效正则表达式s(无分组)以毫秒为单位进行有效计算,并随输入大小线性扩展。"

有没有办法解决这个问题?

共有2个答案

邓昀
2023-03-14

我设法找到了一个解决方案,将正则表达式验证限制在某些字符上,如#、/、\现在一切正常。

景明诚
2023-03-14

回答@Greedo:“是的,我肯定。”在字符类中,如果将“-”放在字符列表的末尾,则只需遮住右方括号和反斜杠。下面的方法有效,但我不知道Sonarqube会如何反应。

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

console.log(res);
 类似资料:
  • 主要内容:标签属性,JSF验证整数范围实例标签用于将字符串值验证为所需格式。 以下代码显示如何使用标记。 标签属性 属性 说明 pattern 格式化模式 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateRegularExpression,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result.xhtml 的代码内容如下所示 - 文件:

  • 我有以下用于javascript密码验证的正则表达式: 正则表达式规则是: 12-25个字符 至少有一个大写字母 至少有一个小写字母 至少有一个数字 至少有一个特殊字符:!#$%()*,-./:;=?@[]^ `{124;}~ 然而,正则表达式似乎不起作用。它匹配任何字符。我该怎么解决这个问题?

  • 问题内容: 我一直在寻找URL的简单正则表达式,有人能用得起吗?我在zend框架验证类中找不到一个,并且看到了几种实现。 问题答案: 我在一些项目中使用了此工具,我不认为我遇到了问题,但我敢肯定它并不详尽: 最后,大多数随机垃圾都是用来处理句子中的情况(以避免匹配尾随时间)。我敢肯定它可以清除,但因为它起作用了。我或多或少只是将其复制到项目之间。

  • 问题内容: 我正在寻找允许我验证json的正则表达式。 我对Regex非常陌生,我知道使用Regex进行解析很不好,但是可以用来验证吗? 问题答案: 是的,可以进行完整的正则表达式验证。 大多数现代正则表达式实现都允许递归正则表达式,该正则表达式可以验证完整的JSON序列化结构。该json.org规范使得它非常简单。 它具有PCRE功能,在PHP中效果很好。应该在Perl中保持不变;并且可以肯定地

  • 问题内容: 我想在PHP中测试正则表达式的有效性,最好在使用前进行测试。这样做的唯一方法是实际尝试a 并查看是否返回吗? 有没有更简单/正确的方法来测试有效的正则表达式? 问题答案: 正如用户 pozs 所说,还应 考虑在测试环境中 放在 preg_match() () 前面, 以防止发出警告或通知。 要验证RegExp只需对其运行 (无需知道您要预先测试的数据) 。如果返回显式false(),则

  • 问题内容: 我正在寻找一个正则表达式字符串,该字符串将验证格式为yyyyMMdd(无分隔符)的日期,并且可以用于leap年。我到目前为止发现的最接近的结果仅验证自2000年以来的日期。 问题答案: 我建议使用此页面上所示的: