[英]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-spec
和dot-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.