Ger*_*áth 2 regex floating-point integer numbers
我有这个正则表达式来测试用户输入是否有效:
value.length === 0 ||
value === '-' ||
(!isNaN(parseFloat(value)) && /^-?\d+\.?\d*$/.test(value))
Run Code Online (Sandbox Code Playgroud)
要点在正则表达式中:/^-?\d+\.?\d*$/.然而,sonarcloud 认为它是一个安全热点,并表示:
确保此处使用的正则表达式(由于回溯而容易受到超线性运行时的影响)不会导致拒绝服务。
我猜这是因为两位数测试的原因,但我找不到办法避免它。它是安全威胁还是无害?
.该警告是由两组数字之间的可选值引起的。这可能意味着正则表达式引擎将回溯以匹配更少的数字\d+和更多的数字\d*,但总是得出相同的结论:它不匹配。
您可以通过以下方式避免这种情况:
^-?\d+(\.\d*)?$
Run Code Online (Sandbox Code Playgroud)
这样,只有当\d*存在分隔点时,图案才会发挥作用。这意味着相同的输入字符不可能被考虑用于该\d+模式,并且稍后(回溯之后)也被考虑用于该\d*模式。