2008-12-15 73 views
10

我正在VB.Net的一個小項目中從一個文本框獲取輸入,並且需要驗證這是一個電子郵件地址。我發現這個表達式「^ [_ a-z0-9 - ] +(。[_ a-z0-9 - ] +)@ [a-z0-9 - ] +(。[a-z0-9 - ] +)(。[az] {2,4})$「,但我無法找到任何方式來測試它是否通過。使用正則表達式驗證電子郵件VB.Net

我要像一些代碼:

if not txtEmail.text = regexString then 
    something happens.. 
else 
    something else happens.. 
end if 
+1

我可以點你,如果你谷歌「的事實vb.net正則表達式「,_first_鏈接爲您提供了一步一步的指示? – Svante 2008-12-15 20:20:22

+2

這是一個很好的問題,在StackOverflow上有記錄 - 我在這裏問這個問題沒有看錯。 – Jeffrey 2008-12-15 20:59:27

回答

18

使用System.Text.RegularExpressions.Regex類:

Function IsEmail(Byval email as string) as boolean 
    Static emailExpression As New Regex("^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$") 

    return emailExpression.IsMatch(email) 
End Function 

瞭解關於這個答案,最重要的是,我沒有寫正則表達式自己。有太多錯誤的方法似乎是正確的,並且有幾個層次的細節可供您使用。例如,您是否想限制爲有效的頂級域名?如果是,您如何解釋他們現在偶爾添加新的TLD?如果正則表達式是最適合該測試的地方,還是應該有單獨的代碼進行檢查?即使這個答案中的表達現在是非常陳舊的,因爲它最初是作者創作的。我推薦的是找到一個資源,您可以使用它來維護您知道的表達式。

+3

`如果...那麼返回True Else Return False`肯定處於反模式的前十名。 : -/ – 2008-12-15 20:13:16

+0

是的:這是我在最後一次演出中獲得的一個壞習慣,政策阻止直接返回布爾表達式的結果。修復示例。 – 2008-12-15 20:16:53

+0

我發現它需要作爲「新的System.Text.RegularExpressions.Regex」它說「作爲新的正則表達式」Thx的幫助:) – AndersE 2008-12-15 20:22:43

5

這是一個很棒的網站,http://regexlib.com/。它不僅有一個測試應用程序,您可以在其中粘貼正則表達式並對其進行測試,但也有一個正則表達式庫,可用於社區對其有效性的反饋等。我不是正則表達式大師,所以當我需要一個快速的正則表達式時,我會去這裏。另外,如果您正在考慮自己開發正則表達式,那麼有一個名爲Regex Buddy的優秀工具,它允許您使用易於理解的正則表達式的英語解釋來即時創建和測試正則表達式。

2

這個正則表達式並不是真正完整的......其實......大部分都不是(請查看this articlethis one)。

除非你真的喜歡痛苦,否則正則表達式不是驗證電子郵件地址的正確方法。

-2

電子郵件地址:RFC 2822(簡體) 匹配正常的電子郵件地址。不檢查頂級域名。 要求「不區分大小寫」選項爲ON。

Dim FoundMatch As Boolean 
Try 
    FoundMatch = Regex.IsMatch(txtEmail.text, "\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase) 
Catch ex As ArgumentException 
    'Syntax error in the regular expression 
End Try 

If Not FoundMatch Then 
    Error = True 
Else 
    Error = False 
End If 
6

my article on matching email addresses with a regex選擇您喜歡的正則表達式,並把它插入到這個Visual Basic代碼:

If Regex.IsMatch(SubjectString, "regex") Then 
    Error = False 
Else 
    Error = True 
End If 

匹配的電子郵件地址的最佳正則表達式是,我不希望得到一個有爭議的話題進入這裏。我的文章討論了在選擇正則表達式時應該注意的問題。 Joel Coehoorn的回答中的正則表達式絕對不是一個好的表達式。

5

可能題外話,因爲它不是一個正則表達式的解決方案,但你可以只使用一些內置的.NET 2.0功能:

try 
{ 
    MailAddress email = new MailAddress(txtEmail.Text); 
} 
catch(FormatException fe) 
{ 
    // output error 
} 
相關問題