У меня есть аннотация, которая проверяет адреса электронной почты, поступающие в наш REST API. В большинстве случаев она работает хорошо, однако по какой-то причине она ломается в электронных письмах, содержащих знак "+", например mail+mail@mail.com
@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 {};
}
Я проверил регулярное выражение на планете регулярных выражений (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}
, чтобы увидеть если оно может соответствовать конкретным письмам со знаком плюс, но не повезло.
Так что, похоже, что регулярное выражение просто не может сопоставить знаки плюс ... или я упустил что-то очевидное?