奇怪的正则表达式行为

问题描述 投票:2回答:1

我有一个注释来验证进入我们的REST API的电子邮件地址。对于大多数部分来说,它做得很好,但由于某种原因,它会打破包含“+”符号的电子邮件,例如[email protected]

@NotNull
@Pattern(regexp = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}")
@ReportAsSingleViolation
@Constraint(validatedBy = {})
@Documented
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
public @interface Email {

    String message() default "Not a valid email!";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

我测试了regex planet(http://www.regexplanet.com/advanced/java/index.html)上的正则表达式,它正常工作,正则表达式匹配完整的邮件地址。

只是为了验证它实际上在做什么,我尝试将正则表达式更改为.+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}并且可行。我还测试了[A-Za-z0-9]+\\+[A-Za-z0-9]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4},看它是否可以匹配具有加号的电子邮件,但没有运气。

所以似乎正则表达式只是无法匹配加号......或者我错过了一些明显的东西?

java regex email
1个回答
0
投票

当发送诸如[email protected]之类的电子邮件作为查询参数时,它将在到代码的路上编码。所以在servlet应用程序中,它看起来像mail [email protected],这似乎是非常规的。这是使用jersey和javax.javaee-api作为java ee实现进行测试的。

所以这个问题的解决方案是为正则表达式添加一个空格。 [A-Za-z0-9 ._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,5}

© www.soinside.com 2019 - 2024. All rights reserved.