簡體   English   中英

c#winforms應用程序中的電子郵件驗證

[英]email validation in a c# winforms application

您好我如何在c#winforms中驗證電子郵件?

您可以使用正則表達式來驗證電子郵件地址:

RegEx reg=new RegEx(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$", RegexOptions.IgnoreCase); ///Object initialization for Regex 
if(reg.IsMatch("email string"))
    //valid email

最好的方法是將此驗證任務轉發給.NET本身:

public bool IsValidEmailAddress (string email)
{
    try
    {
        MailAddress ma = new MailAddress (email);

        return true;
    }
   catch
   {
        return false;
   }
}

當然,它會在某些技術上有效的電子郵件地址(例如非拉丁字符)中引發誤報,但由於它無論如何都無法發送到這些地址,您也可以從一開始就過濾它們。

此頁面具有匹配電子郵件地址的正常表達式。

請記住,這只是一個正式的檢查。 要檢查電子郵件地址是否確實存在,您必須向該地址發送實際電子郵件並檢查郵件服務器的響應。

即使成功,SMTP服務器也可能配置為忽略無效的收件人地址。

如果要驗證地址格式,則應該使用正則表達式。 有成千上萬的例子,所以我會讓你找到並挑選最好的一個。

如果要驗證地址是否存在, 本文將提供有關如何執行此操作的一些指示,而不提供任何特定的代碼示例。

您可以使用正則表達式來驗證它。 有各種不同的人盪盪,但更全面的人我用相當長的,如圖所示這里

最好的方法是在'@'將其拆分為兩個,並分別驗證郵箱部分和域部分。 我知道有一些注冊表,但這些可能會很快變得復雜。

RFC2822的 3.4節完全定義了一個有效的電子郵件地址:查找addr-specdot-atom addr-spec

在本質上郵箱部分的是字母數字或之一,#,$,%,&,”,*,+,一個或多個字符的字符串! - ?,/,=,^,_,`,{ ,|,},〜和一個完整的'。'。 域部分遵循類似的規則。

考慮到靈活性,最簡單的方法可能僅僅是一個字符串檢查要說它有一個“@”,然后檢查郵箱和域部分seperately,看看他們是否包含沒有在上面的字符集。 無論是使用正則表達式還是其他方式執行,都是您自己的選擇。

我使用了來自客戶端驗證的JQuery插件的Regex:

    public static bool ValidEmail(string email)
{
  var regex = new Regex(

@“^((([az] | \\ d | [!#\\ $%&'* + - / = \\?\\ ^ {\\|}~]|[\ -\퟿\豈-\﷏\ﷰ-\￯])+(\\.([az]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_ {\\ |}〜] | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])+)*)|((\\ X22)((((\\ X20 | \\ X09)*(\\ X0D \\ X0A))?(\\ X20 | \\ X09) ?+)((\\ x01- \\ X08 \\ X0B \\ X0C \\ x0e- \\ X1F \\ 0x7F部分] | \\ X21 | [\\ x23- \\ x5b] | [\\ x5d- \\ x7e] | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])|(\\([\\ x01- \\ X09 \\ X0B \\ X0C \\ x0d- \\ 0x7F部分] | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF]) )))*(((\\ X20 | \\ X09)*(\\ X0D \\ X0A))(\\ X20 |?\\ X09)+)(\\ X22)))@((([AZ] |?\\ d | [ \\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])|(([AZ] | \\ d | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])([AZ] | \\ d | - |。| |〜| [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF]) ([az] | \\ d | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF]))))+(([AZ] |。[\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])|(([AZ] | [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])([az] | \\ d | - |。| _ |〜| [\\ u00A0- \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF]) ([az] | [\\ u00A0 - \\ uD7FF \\ uF900- \\ uFDCF \\ uFDF0- \\ uFFEF])))。?$“,RegexOptions.Compiled);

  return regex.IsMatch(email);
}

使用Chris的文章,我為字符串做了一個擴展方法,它將一個DNSLookup庫連接在一起(信用給了Bill Andreozzi,源代碼為billandr@towncompass.com),Tom Janssens提供的最小Telnet實現( http:// www。 corebvba.be )和我自己的RegEx來驗證電子郵件地址:

/// <summary>
/// The regular expression to test the string against.
/// </summary>
private static readonly Regex validEmailRegex = new Regex(
    @"^(([^<>()[\]\\.,;:\s@\""]+"
    + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
    + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
    + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
    + @"[a-zA-Z]{2,}))$",
    RegexOptions.Compiled);

/// <summary>
/// Determines whether the specified string is a valid email address.
/// </summary>
/// <param name="value">
/// The string to validate.
/// </param>
/// <returns>
/// <c>true</c> if the specified string is a valid email address;
/// otherwise, <c>false</c>.
/// </returns>
public static bool IsValidEmailAddress(this string value)
{
    if (!validEmailRegex.IsMatch(value))
    {
        return false;
    }

    var mailServer = new DNS().LookupMX(value.Split('@')[1]);

    if (!mailServer.MoveNext())
    {
        return false;
    }

    var telnet = new TelnetConnection(((DNS_MX_DATA)((DNS_WRAPPER)mailServer.Current).dnsData).pNameExchange, 25);

    try
    {
        if (!TelnetCompare(telnet.Read(), "220"))
        {
            return false;
        }

        telnet.WriteLine("helo hi");
        if (!TelnetCompare(telnet.Read(), "250"))
        {
            return false;
        }

        telnet.WriteLine("mail from: " + value);
        if (!TelnetCompare(telnet.Read(), "250"))
        {
            return false;
        }

        telnet.WriteLine("rcpt to: " + value);
        if (!TelnetCompare(telnet.Read(), "250"))
        {
            return false;
        }
    }
    finally
    {
        telnet.WriteLine("quit");
    }

    return true;
}

/// <summary>
/// Compares two strings for length and content from the Telnet stream.
/// </summary>
/// <param name="input">The input string.</param>
/// <param name="response">The desired response.</param>
/// <returns>true if the response is the first characters if the input,
/// false otherwise</returns>
private static bool TelnetCompare(string input, string response)
{
    if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(response))
    {
        return false;
    }

    if (input.Length < response.Length)
    {
        return false;
    }

    return string.CompareOrdinal(input.Substring(0, response.Length), response) == 0;
}
private void textBox1_Validating(object sender, CancelEventArgs e)
{
System.Text.RegularExpressions.Regex rEMail = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$");
if (textBox1.Text.Length > 0)
{
if (!rEMail.IsMatch(textBox1.Text))
{
MessageBox.Show("E-Mail expected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.SelectAll();
e.Cancel = true;
}
}
}

正則表達式reg =新的正則表達式(@“\\ w +([ - +。] \\ w +) @ \\ w +([ - 。] \\ w +) 。\\ w +([ - 。] \\ w +)*”);

///正則表達式的對象初始化

        if (!reg.IsMatch(email.Text.Trim()))


        {
            errorProvider1.SetError(email, "Please provide a valid Email Address");

            email.Focus();

            return;

        }

確保使用命名空間System.Text.RegularExpression

if (dateEdit1.EditValue == null || textEdit11.EditValue == null || textEdit10.EditValue == null || comboBox1.Text == null
      || textEdit12.EditValue == null || dateEdit2.EditValue == null || textEdit12.EditValue == null || comboBox2.Text == null
      || comboBox2.Text == null || textEdit14.EditValue == null || textEdit15.EditValue == null || textEdit16.EditValue == null
      || textEdit17.EditValue == null || textEdit18.EditValue == null || comboBox5.Text == null || textEdit19.EditValue == null)
{
    XtraMessageBox.Show("Please submit the record");
}
else
{
    DialogResult dialog = XtraMessageBox.Show("Are you sure you want to remove this record?", "Delete Record", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    if (dialog == DialogResult.OK)
    {
        String st = "DELETE FROM OutPatient WHERE OutPatientID =" + textEdit8.Text;

        SqlCommand com = new SqlCommand(st, con);
        con.Open();
        try
        {
            com.ExecuteNonQuery();

        }
        catch (SqlException)
        {
            con.Close();
        }
        ClearOutPatient();

    }
    else if (dialog == DialogResult.Cancel)
    {
        ClearOutPatient();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM