2014-01-14 69 views
3

我想驗證用戶輸入是否是電子郵件地址(將成員添加到數據庫)。檢查文本框中的輸入是否爲電子郵件

當驗證事件被調用時,用戶將在TextBox中輸入數據;我想檢查輸入是否是有效的電子郵件地址。所以在字符串中至少包含一個@和一個點(。)。

有沒有什麼辦法通過代碼或MaskedTextbox中的遮罩來完成此操作?

+0

查找一個正則表達式驗證電子郵件,你應該能夠輕鬆地找到[在C#WinForms應用程序電子郵件驗證]這些 – x4rf41

+0

可能重複(http://stackoverflow.com/questions/1199413/email- validation-in-ac-sharp-winforms-application) – Liam

回答

10

不要打擾正則表達式。 It's a Bad Idea.

我通常從未使用異常來控制程序流程,但就個人而言,在這種情況下,我寧願讓誰創造了MailAddress類專家爲我做的工作:

try 
{ 
    var test = new MailAddress(""); 
} 
catch (FormatException ex) 
{ 
    // wrong format for email 
} 
+0

+1,用於提及MailAddress類。我完全忘記了它。 – Brian

+2

@布萊恩我曾經使用正則表達式。然後我讀[這個答案](http://stackoverflow.com/a/719543/301857),並在裏面死了一點。大聲笑 –

+1

聖地獄,'正則表達式'是一團糟......大聲笑。我想我可能不得不刪除我對這個問題的回答,因爲我首先使用'Regex'來建立_suggested_。 – Brian

0

我建議你使用Regular Expression,如:

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

要驗證文本框的輸入。

示例代碼:

private void button1_Click(object sender, EventArgs e) 
{ 
    Regex emailRegex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=? 
           ^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ 
           [a-z0-9](?:[a-z0-9-]*[a-z0-9])?"); 

    if (emailRegex.IsMatch(textBox1.Text)) 
    { 
     MessageBox.Show(textBox1.Text + "matches the expected format.", "Attention"); 
    } 
} 

編輯:我發現了一個更好的,更全面的Regex

2

正則表達式簡單的電子郵件比賽:

@"\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b" 

正則表達式RFC 2822標準的電子郵件比賽:

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

參見:如何:Verify that Strings Are in Valid Email Format - MSDN

正則表達式您正在尋找應該是:

"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@)) 
(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,24}))$" 

(來自同一source

2

不要使用正則表達式,它忽略了很多情況,甚至不好笑,除了聰明的人以前,我們已經來解決這個問題。

using System.ComponentModel.DataAnnotations; 

public class TestModel{ 
    [EmailAddress] 
    public string Email { get; set; } 
} 
+0

這應該是最佳答案。它使用@ Html.ValidationMessageFor(m => m.Email) – SeanKPS

1

我推薦你使用這種方式,它對我來說很好。

Regex reg = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); 
    if (!reg.IsMatch(txtEmail.Text)) 
    { 
     // Email is not valid 
    } 
+1

爲表單提供了電子郵件驗證。請提供足夠的詳細信息來回答問題...... OP提到數據來自「TextBox」,驗證事件被調用,它應該匹配一個字符串'atleast @和點(。)'。您的代碼如何滿足這些要求,以及爲了完成OP的目標而使用了'isValid'和'UserMessage'變量? – CPHPython

相關問題