【发布时间】:2020-11-21 01:58:06
【问题描述】:
我对特殊字符有以下正则表达式验证:
.match(/[`~!@#\$%\^&\*\(\)\-=_\\\[\]{}/\?,\.\<\>]/)
它可以工作,但它没有通过 sonarqube,我收到一个安全热点错误:
“根据输入字符串评估正则表达式可能是一项极其耗费 CPU 的任务。特制的正则表达式(例如 (a+)+s)将需要几秒钟来评估输入字符串。
问题在于,输入中每增加一个字符,计算正则表达式所需的时间就会加倍。但是,等效的正则表达式 a+s(没有分组)可以在毫秒内高效计算,并随输入大小线性缩放。”
关于如何解决这个问题的任何想法?
【问题讨论】:
-
您要消除所有特殊字符吗?为什么不使用
\W? ` -
hmm 也许我只能限制 # / \ ,这些让我很麻烦..我不明白 /W ?
-
W匹配所有非数字和非文字字符,所以所有特殊字符 -
我现在尝试了 /W,但不适用于 # / \ 个字符
-
您不需要在
[]字符类定义中屏蔽(以“\”开头)所有字符。也许你不屏蔽(和)会得到更好的结果?
标签: javascript sonarqube