大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java郵箱驗證方法

Java郵箱驗證方法

更新時間:2022-08-05 10:18:13 來源:動力節點 瀏覽3698次

Java郵箱驗證方法有哪些?動力節點小編來告訴大家。

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

以下是通過此電子郵件驗證無效的一些電子郵件地址的候選名單:

用戶名[email protected]

[email protected]

用戶名@domain.com。

用戶名@.com

用于驗證非拉丁或 Unicode 字符電子郵件的正則表達式

正則表達式適用于用英語編寫的電子郵件地址,但不適用于非拉丁語電子郵件地址。

所以我們將編寫一個正則表達式,我們也可以使用它來驗證 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 5322 用于電子郵件驗證的正則表達式

我們可以使用 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 驗證正則表達式

此正則表達式由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 域:允許在電子郵件的本地部分使用字符 + 字符。對于 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 驗證器

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在線學習,里面的課程內容從入門到精通,細致全面,通俗易懂,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天爱天天色 | 青青热在线观看视频精品 | 久插视频| 天天操天天干视频 | 99热8| 久久精品国产只有精品2020 | 久久一区二区三区免费 | 国产成人亚洲精品老王 | 国产精品国产欧美综合一区 | 国产成人咱精品视频免费网站 | 日本三级不卡 | 中国美女日b | 精品免费视在线观看 | 日韩激情中文字幕一区二区 | 中文字幕精品视频在线观 | www一级毛片 | 欧美一级毛片片aa视频 | 亚洲线精品一区二区三区 | 四虎国产精品视频免费看 | 欧美一级片在线免费观看 | 高清国产美女一级毛片 | 国产美女mm131爽爽爽免费 | 欧美综合国产精品日韩一 | 一级免费a | 亚洲综合日韩在线亚洲欧美专区 | 亚洲美女视频网址 | 欧美成人激情视频 | 97免费视频在线观看 | 欧美性猛交ⅹxxx乱大交按摩 | 女人色毛片女人色毛片中国 | 91久久亚洲精品国产一区二区 | 亚洲欧美专区 | 一区二区不卡在线观看 | 青青国产成人精品视频 | 成年女人在线观看片免费视频 | 一区二区精品视频 | 中文字幕亚洲高清综合 | 欧美高清在线精品一区二区不卡 | 精品国产免费第一区二区三区日韩 | 国产做人爱三级视频在线 | 4虎影院永久地址www |