更新時間:2022-08-05 10:18:13 來源:動力節點 瀏覽3698次
Java郵箱驗證方法有哪些?動力節點小編來告訴大家。
幾乎每個有用戶注冊的應用程序都需要電子郵件驗證。
電子郵件地址分為三個主要部分:本地部分、@符號和域。例如,如果“ [email protected] ”是一封電子郵件,那么:
本地部分 = 用戶名
@=@
域 = domain.com
通過字符串操作技術驗證電子郵件地址可能需要花費大量精力,因為我們通常需要計算和檢查所有字符類型和長度。但是在 Java 中,通過使用Java正則表達式,它會容易得多。
眾所周知,正則表達式是用于匹配模式的字符序列。在以下部分中,我們將了解如何使用幾種不同的正則表達式方法來執行電子郵件驗證。
驗證電子郵件地址的最簡單的正則表達式是^(.+)@(\S+) $。
它僅檢查電子郵件地址中是否存在@符號。如果存在,則驗證結果返回true,否則結果為false。但是,此正則表達式不會檢查電子郵件的本地部分和域。
例如,根據這個正則表達式,username @domain.com 將通過驗證,但username#domain.com將失敗驗證。
讓我們定義一個簡單的輔助方法來匹配正則表達式模式:
public static boolean patternMatches(String emailAddress, String regexPattern) {
return Pattern.compile(regexPattern)
.matcher(emailAddress)
.matches();
}
我們還將編寫代碼以使用此正則表達式驗證電子郵件地址:
@Test
public void testUsingSimpleRegex() {
emailAddress = "[email protected]";
regexPattern = "^(.+)@(\\S+)$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
電子郵件地址中缺少@符號也會導致驗證失敗。
現在讓我們編寫一個更嚴格的正則表達式來檢查本地部分以及電子郵件的域部分:
^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@[^-][A-Za- z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$
使用此正則表達式在電子郵件地址的本地部分施加以下限制:
它允許從 0 到 9 的數值。
允許從 a 到 z 的大寫和小寫字母。
允許使用下劃線“_”、連字符“-”和點“.”
本地部分的開頭和結尾不允許使用點。
不允許使用連續的點。
對于本地部分,最多允許 64 個字符。
此正則表達式中域部分的限制包括:
它允許從 0 到 9 的數值。
我們允許從 a 到 z 的大寫和小寫字母。
連字符“-”和點“.” 不允許在域部分的開頭和結尾。
沒有連續的點。
我們還將編寫代碼來測試這個正則表達式:
@Test
public void testUsingStrictRegex() {
emailAddress = "[email protected]";
regexPattern = "^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@"
+ "[^-][A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
因此,通過這種電子郵件驗證技術有效的一些電子郵件地址是:
用戶名@domain.com
用戶名@domain.com
用戶名@domain.com
用戶名@domain.co.in
用戶名@domain.com
以下是通過此電子郵件驗證無效的一些電子郵件地址的候選名單:
用戶名@domain.com。
用戶名@.com
正則表達式適用于用英語編寫的電子郵件地址,但不適用于非拉丁語電子郵件地址。
所以我們將編寫一個正則表達式,我們也可以使用它來驗證 unicode 字符:
^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@[^-][ \\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$
我們可以使用此正則表達式來驗證 Unicode 或非拉丁電子郵件地址以支持所有語言。
讓我們通過編寫測試來檢查這個正則表達式:
@Test
public void testUsingUnicodeRegex() {
emailAddress = "用戶名@領域.電腦";
regexPattern = "^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@"
+ "[^-][\\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
此正則表達式不僅提供了一種更嚴格的電子郵件地址驗證方法,而且還支持非拉丁字符。
我們可以使用 RFC 標準提供的,而不是編寫自定義正則表達式來驗證電子郵件地址。
RFC 5322是RFC 822的更新版本,為電子郵件驗證提供了正則表達式。
讓我們來看看:
^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-] +@ [a-zA-Z0-9.-]+$
正如我們所看到的,這是一個非常簡單的正則表達式,它允許電子郵件中的所有字符。
但是,它不允許使用豎線字符 (|) 和單引號 ('),因為它們在從客戶端站點傳遞到服務器時存在潛在的SQL 注入風險。
讓我們編寫代碼以使用此正則表達式驗證電子郵件:
@Test
public void testUsingRFC5322Regex() {
emailAddress = "[email protected]";
regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
我們編寫了正則表達式來驗證電子郵件地址的本地和域部分。現在我們還將編寫一個正則表達式來檢查電子郵件的頂級域。
以下正則表達式驗證電子郵件地址的頂級域部分:
^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|} ~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$
此正則表達式主要檢查電子郵件地址是否只有一個點,以及頂級域中是否存在最少兩個和最多六個字符。
我們還將編寫一些代碼來使用這個正則表達式來驗證電子郵件地址:
@Test
public void testTopLevelDomain() {
emailAddress = "[email protected]";
regexPattern = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*"
+ "@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
現在讓我們編寫一個正則表達式來限制電子郵件地址中點的使用:
^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'* +/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$
上面的正則表達式用于限制連續點、前導點和尾隨點。因此,一封電子郵件可以包含多個點,但在本地和域部分中不連續。
讓我們看一下代碼:
@Test
public void testRestrictDots() {
emailAddress = "[email protected]";
regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@"
+ "[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
此正則表達式由OWASP 驗證正則表達式存儲庫提供,用于檢查電子郵件驗證:
^[a-zA-Z0-9_+&*-] + (?:\\.[a-zA-Z0-9_+&*-] + )*@(?:[a-zA-Z0-9- ]+\\.) + [a-zA-Z]{2, 7}
此正則表達式還支持標準電子郵件結構中的大多數驗證。
讓我們使用以下代碼驗證電子郵件地址:
@Test
public void testOwaspValidation() {
emailAddress = "[email protected]";
regexPattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
有一種特殊情況僅適用于 Gmail 域:允許在電子郵件的本地部分使用字符 + 字符。對于 Gmail 域,兩個電子郵件地址[email protected]和[email protected]是相同的。
此外,username @gmail.com類似于[email protected]。
我們必須實現一個稍微不同的正則表達式,它也將通過這種特殊情況的電子郵件驗證:
^(?=.{1,64}@)[A-Za-z0-9_-+]+(\\.[A-Za-z0-9_-+]+)*@[^-][A- Za-z0-9-+]+(\\.[A-Za-z0-9-+]+)*(\\.[A-Za-z]{2,})$
讓我們寫一個例子來測試這個用例:
@Test
public void testGmailSpecialCase() {
emailAddress = "[email protected]";
regexPattern = "^(?=.{1,64}@)[A-Za-z0-9\\+_-]+(\\.[A-Za-z0-9\\+_-]+)*@"
+ "[^-][A-Za-z0-9\\+-]+(\\.[A-Za-z0-9\\+-]+)*(\\.[A-Za-z]{2,})$";
assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}
Apache Commons Validator是一個包含標準驗證規則的驗證包。所以通過導入這個包,我們可以應用電子郵件驗證。
我們可以使用EmailValidator類來驗證電子郵件,它使用 RFC 822 標準。此驗證器包含用于驗證電子郵件的自定義代碼和正則表達式的混合。它不僅支持特殊字符,還支持我們討論過的 Unicode 字符。
讓我們在項目中添加commons-validator依賴項:
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>${validator.version}</version>
</dependency>
現在我們可以使用以下代碼驗證電子郵件地址:
@Test
public void testUsingEmailValidator() {
emailAddress = "[email protected]";
assertTrue(EmailValidator.getInstance()
.isValid(emailAddress));
}
以上就是關于“Java郵箱驗證方法”的介紹,大家如果對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,細致全面,通俗易懂,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習