[英]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.