gpt4 book ai didi

java - 重构这种可能导致大输入 Sonar 堆栈溢出的重复

转载 作者:行者123 更新时间:2023-12-05 04:52:22 28 4
gpt4 key购买 nike

我正在尝试使用以下正则表达式模式验证电子邮件,

 @Pattern(regexp="^$|[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+", message = "Email address invalid")

此正则表达式按预期工作,但 Sonar 将其突出显示为严重错误:

Refactor this repetition that can lead to a stack overflow for large inputs.

你能帮忙缩短正则表达式,但逻辑应该保持不变吗?

Picture for reference

最佳答案

我建议你看看ReDoS attacks .由于嵌套重复,您的正则表达式容易受到 ReDoS 攻击。

如果你试图避免声纳警告并且不关心正则表达式是否非常丑陋,你可以替换最后一个捕获组 (\\.[a-zA-Z0-9][a -zA-Z0-9\\-]{0,25})+ 类似:

(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})?(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})?(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})?

并尽可能多次重复“可选”位。用户在一个电子邮件地址中拥有超过 4-5 个子域的情况非常罕见,但这并非 100% 万无一失。似乎您只允许一种奇怪的特定“ flavor ”的电子邮件地址(即所有 0-25 位)。如果你摆脱了这些要求,你可以用一些链接替换最后一组:

[.a-zA-Z0-9\\-]*\\.[a-zA-Z0-9][a-zA-Z0-9\\-]

(注意第一个字符类中的文字 .)

正如@VGR 所建议的,@Email validator 更适合电子邮件验证。验证电子邮件非常复杂。

关于java - 重构这种可能导致大输入 Sonar 堆栈溢出的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66532068/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com