匹配负/正浮点数/int 正则表达式 - 是邪恶的吗?

Match negative/positive float/int regex - is it evil?

提问人:Gergő Horváth 提问时间:7/27/2022 更新时间:7/27/2022 访问量:287

问:

我有这个正则表达式来测试用户输入是否有效:

value.length === 0 ||
value === '-' ||
(!isNaN(parseFloat(value)) && /^-?\d+\.?\d*$/.test(value))

主要观点在正则表达式中:.然而,声纳云将其视为一个安全热点,并表示:/^-?\d+\.?\d*$/

确保此处使用的正则表达式(由于回溯而容易受到超线性运行时的影响)不会导致拒绝服务。

我想这是因为两位数的测试,但我找不到避免它的方法。它是安全威胁,还是无害?

正则表达式 浮点 整数

评论


答:

5赞 trincot 7/27/2022 #1

警告是由两组数字之间的可选值引起的。这可能意味着正则表达式引擎会回溯以匹配更少的数字和更多的数字,但总是得出相同的结论:它不匹配。.\d+\d*

您可以通过以下方式避免这种情况:

^-?\d+(\.\d*)?$

这样,模式唯一起作用的时候,就是当有一个分隔点时。这意味着不可能将相同的输入字符考虑用于模式,然后(回溯后)考虑用于模式。\d*\d+\d*

评论

0赞 Gergő Horváth 7/27/2022
简直不敢相信我错过了..我正在走向疯狂的方向,就像其他事情一样。^-?\d+\.?(?(?=\.)\d...