JAVA 電子郵箱格式驗證,使用正則表達式

正則表達式

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

元字符

由於 \ 和 " 或者 ’ 組合無法顯示出來,所以下面的內容儘可能的加了一個空格。

字符 描述
\ 將下一個字符標記爲一個特殊字符、或一個原義字符、或一個 向後引用、或一個八進制轉義符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一個換行符。序列 ’ \ \ ’ 匹配 " \ " 而 “\ (” 則匹配 " ("。
^ 匹配輸入字符串的開始位置。
$ 匹配輸入字符串的結束位置。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價於{0,}。
+ 匹配前面的子表達式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價於 {1,}。
{n,m} m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 將匹配 “fooooood” 中的前三個 o。請注意在逗號和兩個數之間不能有空格。
. 匹配除換行符(\n、\r)之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用像"(.I\n)"的模式。
(pattern) 匹配 pattern 並獲取這一匹配 。
[xyz] 字符集合。匹配所包含的任意一個字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[a-z] 字符範圍。匹配指定範圍內的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 範圍內的任意小寫字母字符。
\w 匹配字母、數字、下劃線。等價於’[A-Za-z0-9_]’。

當然不止上面那麼少的元字符,只列出來用到的,還有很多元字符,包括普通字符、非打印字符、特殊字符、限定符、定位符等。如果想要了解更多關於這方面的知識,可以點這裏。正則表達式 - 教程

電子郵箱格式驗證

在網絡中,電子郵箱可以自動接收網絡任何電子郵箱所發的電子郵件,並能存儲規定大小的等多種格式的電子文件。電子郵箱具有單獨的網絡域名,其電子郵局地址在@後標註,電子郵箱一般格式爲:用戶名@域名。

—個完整的Internet郵件地址由以下兩個部分組成,格式如下:登錄名@主機名.域名
中間用—個表示“在”(at)的符號“@”分開,符號的左邊是對方的登錄名,右邊是完整的主機名,它由主機名與域名組成。其中,域名由幾部分組成,每一部分稱爲一個子域(Subdomain),各子域之間用圓點“.”隔開,每個子域都會告訴用戶一些有關這臺郵件服務器的信息。

從上面的描述就可以看出來,電子郵箱的格式範圍很廣,唯一比較明顯的限制可能就是隻有一個"@"符號,但是這並不代表我們能胡來,根據國內一些企業郵箱對於註冊郵箱賬號的限制,列了幾條比較通用的電子郵箱格式限制:

“@”的左邊限制:

  • 由a~z的英文字母(不區分大小寫)開頭
  • 可由英文字母、0~9的數字、點、減號或下劃線組成
  • 長度爲3~18個字符
  • 不能以點、減號結尾
“@”的左邊限制 正則表達式
英文字母、0~9的數字、下劃線 \w+
減號、點 [-.]
長度爲3~18個字符 {3,18}
不能以點、減號或下劃線結尾 [-.][A-Za-z0-9]+

將上面的正則表達式按照一定的邏輯連接起來:

(\w+([-.][A-Za-z0-9]+)*){3,18}

至於用到了 ( )*,代表這裏面的字符串可能會出現,也可能不出現。而 + 代表一定出現一次。

“@”的右邊限制:

  • 只能有一個點,點和"@"之間不能爲空
  • 可由英文字母、0~9的數字、點、減號或下劃線組成
  • 不能以點、減號或下劃線結尾
“@”的右邊限制 正則表達式
英文字母、0~9的數字、下劃線 \w+
只能有一個點,點和"@"之間不能爲空 @\w+([-.][A-Za-z0-9]+)* \.
減號、點 [-.]
不能以點、減號或下劃線結尾 [-.][A-Za-z0-9]+

將上面的正則表達式按照一定的邏輯連接起來:

@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*

So,將這兩段正則表達式連起來就是驗證電子郵箱的正則表達式了:

^(\w+([-.][A-Za-z0-9]+)*){3,18}@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*$

以"^“開始,以”$"結束。

JAVA代碼實現:

public static boolean isValidEmail(String email) {
        if ((email != null) && (!email.isEmpty())) {
            return Pattern.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", email);
        }
        return false;
    }

測試結果截圖:
在這裏插入圖片描述

如果覺得上面的正則表達式太複雜,範圍太廣了,可以用下面這個:

[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

只能是0-9數字和大小寫字母組成,-和多餘的點都不行,但是這個可用於大部分場景!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章