Unity - 使用正則條件式驗證信箱格式

簡單紀錄在Web端比較常見的正則運算如何在C# / Unity的環境下進行處理

 

使用正則進行篩選的原因

一般來說,只有當處理玩家輸入的InputField,或是與Server端的特殊資料驗證才需要特別使用正則驗證某些字串
而內建的InputField組件雖然有ContentType可以去直接指定輸入欄位的相關內容資訊

但實際情況來說,在使用時會根據使用者的實際行為(切換輸入鍵盤)及自定義的輸入法造成不同的輸入結果
理論上最確切的情境,只是會幫使用者在開啟虛擬鍵盤時,自動導向不同輸入狀態的鍵盤配置

所以若是想要在前端就確保使用者輸入的確實是正確的電子信箱地址,就最好做進一步的處理

電子郵件的格式組成

而根據傳輸電子郵件的標準協定 - SMTP (簡單郵件傳輸協定 / Simple Mail Transfer Protocol)
以及基於與其相關的RFC 5321 4.5.3.1.3的條目說明

 The maximum total length of a reverse-path or forward-path is 256
   octets (including the punctuation and element separators).

意即一個電子郵件帳號的格式,最多由256字元組成,其中包含實際上傳輸時用來區隔寄件目標的前後兩個角括弧<>

將RFC規範轉換為正則條件式

大抵上在實作上來說,若不熟悉邏輯的轉換,可以參考一些線上教學或工具

且如果在遊戲中使用流程來說會反覆使用,就可以把Regex實體作為靜態欄位處理,可以提升初始化的速度與開銷

簡單實作初始化的邏輯如下:

//RFC 5321 - 4.5.3.1.3
private const string mailPattern = @"\w{1,63}@[a-zA-Z0-9]{2,63}\.[a-zA-Z]{2,63}(\.[a-zA-Z]{2,63})?$";

//宣告 Regex 指定單行
public static Regex MailRegex = new Regex(mailPattern, RegexOptions.Compiled);

而在驗證的時做上就可以這樣處理

//....

if (!MailRegex.IsMatch(/*{Your InputField}.text)*/)
{
	// 當不符合由格式時的特別處理
	return;
}

//....

以上,簡單紀錄

 

參考文件

Java Regex email郵件格式
https://matthung0807.blogspot.com/2017/09/java-regex-email.html

邮箱/邮件地址的正则表达式及分析(JavaScript,email,regex)
https://juejin.im/post/6844903574778937358

[Javascript] Regular Expression – Email 表單驗證
https://ithelp.ithome.com.tw/articles/10094951

 


感謝觀看,若你能夠留下一些建議與感想
都會成為我寫文章的動力,感謝!!