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

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

Java郵箱驗(yàn)證方法

更新時間:2022-08-05 10:18:13 來源:動力節(jié)點(diǎn) 瀏覽3889次

Java郵箱驗(yàn)證方法有哪些?動力節(jié)點(diǎn)小編來告訴大家。

Java 中的電子郵件驗(yàn)證

幾乎每個有用戶注冊的應(yīng)用程序都需要電子郵件驗(yàn)證。

電子郵件地址分為三個主要部分:本地部分、@符號和域。例如,如果“ username@domain.com ”是一封電子郵件,那么:

本地部分 = 用戶名

@=@

域 = domain.com

通過字符串操作技術(shù)驗(yàn)證電子郵件地址可能需要花費(fèi)大量精力,因?yàn)槲覀兺ǔP枰?jì)算和檢查所有字符類型和長度。但是在 Java 中,通過使用Java正則表達(dá)式,它會容易得多。

眾所周知,正則表達(dá)式是用于匹配模式的字符序列。在以下部分中,我們將了解如何使用幾種不同的正則表達(dá)式方法來執(zhí)行電子郵件驗(yàn)證。

簡單的正則表達(dá)式驗(yàn)證

驗(yàn)證電子郵件地址的最簡單的正則表達(dá)式是^(.+)@(\S+) $。

它僅檢查電子郵件地址中是否存在@符號。如果存在,則驗(yàn)證結(jié)果返回true,否則結(jié)果為false。但是,此正則表達(dá)式不會檢查電子郵件的本地部分和域。

例如,根據(jù)這個正則表達(dá)式,username @domain.com 將通過驗(yàn)證,但username#domain.com將失敗驗(yàn)證。

讓我們定義一個簡單的輔助方法來匹配正則表達(dá)式模式:

public static boolean patternMatches(String emailAddress, String regexPattern) {
    return Pattern.compile(regexPattern)
      .matcher(emailAddress)
      .matches();
}

我們還將編寫代碼以使用此正則表達(dá)式驗(yàn)證電子郵件地址:

@Test
public void testUsingSimpleRegex() {
    emailAddress = "username@domain.com";
    regexPattern = "^(.+)@(\\S+)$";
    assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}

電子郵件地址中缺少@符號也會導(dǎo)致驗(yàn)證失敗。

嚴(yán)格的正則表達(dá)式驗(yàn)證

現(xiàn)在讓我們編寫一個更嚴(yán)格的正則表達(dá)式來檢查本地部分以及電子郵件的域部分:

^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@[^-][A-Za- z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$

使用此正則表達(dá)式在電子郵件地址的本地部分施加以下限制:

它允許從 0 到 9 的數(shù)值。

允許從 a 到 z 的大寫和小寫字母。

允許使用下劃線“_”、連字符“-”和點(diǎn)“.”

本地部分的開頭和結(jié)尾不允許使用點(diǎn)。

不允許使用連續(xù)的點(diǎn)。

對于本地部分,最多允許 64 個字符。

此正則表達(dá)式中域部分的限制包括:

它允許從 0 到 9 的數(shù)值。

我們允許從 a 到 z 的大寫和小寫字母。

連字符“-”和點(diǎn)“.” 不允許在域部分的開頭和結(jié)尾。

沒有連續(xù)的點(diǎn)。

我們還將編寫代碼來測試這個正則表達(dá)式:

@Test
public void testUsingStrictRegex() {
    emailAddress = "username@domain.com";
    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));
}

因此,通過這種電子郵件驗(yàn)證技術(shù)有效的一些電子郵件地址是:

用戶名@domain.com

用戶名@domain.com

用戶名@domain.com

用戶名@domain.co.in

用戶名@domain.com

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

用戶名.@domain.com

.user.name@domain.com

用戶名@domain.com。

用戶名@.com

用于驗(yàn)證非拉丁或 Unicode 字符電子郵件的正則表達(dá)式

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

所以我們將編寫一個正則表達(dá)式,我們也可以使用它來驗(yàn)證 unicode 字符:

^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@[^-][ \\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$

我們可以使用此正則表達(dá)式來驗(yàn)證 Unicode 或非拉丁電子郵件地址以支持所有語言。

讓我們通過編寫測試來檢查這個正則表達(dá)式:

@Test
public void testUsingUnicodeRegex() {
    emailAddress = "用戶名@領(lǐng)域.電腦";
    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));
}

此正則表達(dá)式不僅提供了一種更嚴(yán)格的電子郵件地址驗(yàn)證方法,而且還支持非拉丁字符。

RFC 5322 用于電子郵件驗(yàn)證的正則表達(dá)式

我們可以使用 RFC 標(biāo)準(zhǔn)提供的,而不是編寫自定義正則表達(dá)式來驗(yàn)證電子郵件地址。

RFC 5322是RFC 822的更新版本,為電子郵件驗(yàn)證提供了正則表達(dá)式。

讓我們來看看:

^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-] +@ [a-zA-Z0-9.-]+$

正如我們所看到的,這是一個非常簡單的正則表達(dá)式,它允許電子郵件中的所有字符。

但是,它不允許使用豎線字符 (|) 和單引號 ('),因?yàn)樗鼈冊趶目蛻舳苏军c(diǎn)傳遞到服務(wù)器時存在潛在的SQL 注入風(fēng)險(xiǎn)。

讓我們編寫代碼以使用此正則表達(dá)式驗(yàn)證電子郵件:

@Test
public void testUsingRFC5322Regex() {
    emailAddress = "username@domain.com";
    regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
    assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}

正則表達(dá)式檢查頂級域中的字符

我們編寫了正則表達(dá)式來驗(yàn)證電子郵件地址的本地和域部分。現(xiàn)在我們還將編寫一個正則表達(dá)式來檢查電子郵件的頂級域。

以下正則表達(dá)式驗(yàn)證電子郵件地址的頂級域部分:

^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|} ~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$

此正則表達(dá)式主要檢查電子郵件地址是否只有一個點(diǎn),以及頂級域中是否存在最少兩個和最多六個字符。

我們還將編寫一些代碼來使用這個正則表達(dá)式來驗(yàn)證電子郵件地址:

@Test
public void testTopLevelDomain() {
    emailAddress = "username@domain.com";
    regexPattern = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*" 
        + "@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
    assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}

用于限制連續(xù)、尾隨和前導(dǎo)點(diǎn)的正則表達(dá)式

現(xiàn)在讓我們編寫一個正則表達(dá)式來限制電子郵件地址中點(diǎn)的使用:

^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'* +/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$

上面的正則表達(dá)式用于限制連續(xù)點(diǎn)、前導(dǎo)點(diǎn)和尾隨點(diǎn)。因此,一封電子郵件可以包含多個點(diǎn),但在本地和域部分中不連續(xù)。

讓我們看一下代碼:

@Test
public void testRestrictDots() {
    emailAddress = "username@domain.com";
    regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@" 
        + "[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";
    assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
}

OWASP 驗(yàn)證正則表達(dá)式

此正則表達(dá)式由OWASP 驗(yàn)證正則表達(dá)式存儲庫提供,用于檢查電子郵件驗(yàn)證:

^[a-zA-Z0-9_+&*-] + (?:\\.[a-zA-Z0-9_+&*-] + )*@(?:[a-zA-Z0-9- ]+\\.) + [a-zA-Z]{2, 7}

此正則表達(dá)式還支持標(biāo)準(zhǔn)電子郵件結(jié)構(gòu)中的大多數(shù)驗(yàn)證。

讓我們使用以下代碼驗(yàn)證電子郵件地址:

@Test
public void testOwaspValidation() {
    emailAddress = "username@domain.com";
    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 域,兩個電子郵件地址username+something@gmail.com和username@gmail.com是相同的。

此外,username @gmail.com類似于user+name@gmail.com。

我們必須實(shí)現(xiàn)一個稍微不同的正則表達(dá)式,它也將通過這種特殊情況的電子郵件驗(yàn)證:

^(?=.{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 = "username+something@domain.com";
    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 驗(yàn)證器

Apache Commons Validator是一個包含標(biāo)準(zhǔn)驗(yàn)證規(guī)則的驗(yàn)證包。所以通過導(dǎo)入這個包,我們可以應(yīng)用電子郵件驗(yàn)證。

我們可以使用EmailValidator類來驗(yàn)證電子郵件,它使用 RFC 822 標(biāo)準(zhǔn)。此驗(yàn)證器包含用于驗(yàn)證電子郵件的自定義代碼和正則表達(dá)式的混合。它不僅支持特殊字符,還支持我們討論過的 Unicode 字符。

讓我們在項(xiàng)目中添加commons-validator依賴項(xiàng):

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>${validator.version}</version>
</dependency>

現(xiàn)在我們可以使用以下代碼驗(yàn)證電子郵件地址:

@Test
public void testUsingEmailValidator() {
    emailAddress = "username@domain.com";
    assertTrue(EmailValidator.getInstance()
      .isValid(emailAddress));
}

以上就是關(guān)于“Java郵箱驗(yàn)證方法”的介紹,大家如果對此比較感興趣,想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,細(xì)致全面,通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 爱爱小视频免费体验区在线观看 | 激情宗合网 | 久久青草18免费观看网站 | 国产一极毛片 | se成人国产精品 | 国产99网站| 亚洲18岁禁止 | 亚洲福利视频一区二区三区 | 在线播放日本爽快片 | 寂寞午夜影院 | 波多野结衣高清在线播放 | 国产成人免费全部网站 | 亚洲综合伦理 | 欧美a在线观看 | 国产亚洲精品一区二区三区 | 日韩中文字幕在线亚洲一区 | 色网站视频 | 亚洲精品99久久久久中文字幕 | 五月花在线观看播放视频 | 成人免费观看网欧美片 | 精品黑人一区二区三区 | 手机在线看片国产 | 国产高清不卡视频 | 国产老熟| 轻轻色在线视频中文字幕 | 中文字幕在线精品视频入口一区 | chinese在线播放91国内 | 中文字幕精品一区二区三区视频 | 香蕉久久网站 | 婷婷丁香在线视频 | 99在线视频播放 | 中文字幕在线激情日韩一区 | 国产一区二区不卡视频 | 亚洲区视频 | 成人在线观看不卡 | 色综合综合色综合色综合 | 在线观看视频中文字幕 | 亚洲综合色在线 | 久久三级视频 | 在线视频欧美精品 | 性大交|