簡體   English   中英

奇怪的正則表達式行為

[英]Odd regex behaviour

我有一個批注,用於驗證進入我們的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 {};
}

我已經在regex行星( http://www.regexplanet.com/advanced/java/index.html )上對其進行了測試,並且該regex與完整的郵件地址匹配。

為了驗證它是否確實在做某事,我嘗試將正則表達式更改為.+@[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} ,看看它是否可以與帶有加號但沒有運氣的電子郵件特別匹配。

因此,似乎正則表達式無法匹配加號...或者我缺少明顯的東西嗎?

在發送電子郵件(例如mail+mail@mail.com作為查詢參數時,它將在編碼途中進行編碼。 因此,在servlet應用程序中,它看起來像mail mail@mail.com ,看起來非常不常規。 已使用jersey和javax.javaee-api作為java ee實現進行了測試。

因此,解決此問題的方法是為正則表達式添加一個空間。 [A-Za-z0-9 ._%-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,5}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM