Странное поведение регулярных выражений

munHunger спросил: 27 ноября 2017 в 06:25 в: java

У меня есть аннотация, которая проверяет адреса электронной почты, поступающие в наш 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}, чтобы увидеть если оно может соответствовать конкретным письмам со знаком плюс, но не повезло.

Так что, похоже, что регулярное выражение просто не может сопоставить знаки плюс ... или я упустил что-то очевидное?

0 ответов