[英]How to check if email is valid format or not
以下電子郵件格式無效
fulya_42_@hotmail.coö
但是到目前為止,我發現並嘗試使用C#進行的所有驗證都表明這是正確的電子郵件,但不是
如何使用C#4.5.2驗證電子郵件是否有效? 謝謝
確定更新的問題
我要問的原因是最大的電子郵件服務mandrill api之一,當您嘗試通過電子郵件發送此地址時會引發內部服務器錯誤
因此,他們甚至在嘗試發送電子郵件之前都必須使用某種驗證。 我的目的是在嘗試謝謝之前先找到他們用什么來消除此類電子郵件
通過使用正則表達式
string emailID = "fulya_42_@hotmail.coö";
bool isEmail = Regex.IsMatch(emailID, @"\A(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)\Z");
if (isEmail)
{
Response.Write("Valid");
}
從https://msdn.microsoft.com/zh-cn/library/01escwtf(v=vs.110).aspx檢查以下類
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class RegexUtilities
{
bool invalid = false;
public bool IsValidEmail(string strIn)
{
invalid = false;
if (String.IsNullOrEmpty(strIn))
return false;
// Use IdnMapping class to convert Unicode domain names.
try {
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException) {
return false;
}
if (invalid)
return false;
// Return true if strIn is in valid e-mail format.
try {
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException) {
return false;
}
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try {
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException) {
invalid = true;
}
return match.Groups[1].Value + domainName;
}
}
或在此處查看@Cogwheel答案C#代碼以驗證電子郵件地址
可以使用以下方式匹配電子郵件地址的正則表達式:
return Regex.IsMatch(strIn,
@"^(?("")(""[^""]+?""@)|(([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,17}))$",
RegexOptions.IgnoreCase);
參考MSDN
但是在您的情況下:
fulya_42_@hotmail.coö
如果您正在從“ .coo
”中檢查電子郵件地址的有效性(根據您的觀察是無效的),則它不會顯示任何錯誤,因為regex不會對此進行驗證,因此您必須手動添加一些您接受的域,例如: gmail.com,yahoo.com等。
在SonerGonul對問題的評論中正確地說
謝謝
首先,您提供的電子郵件地址采用有效格式 。 -您可以更進一步,並根據需要驗證域是否有效; 但是無論哪種方式,您都應該驗證所有權,在這種情況下,您將知道電子郵件地址和域是有效的。
其次,您實際上不應該使用Regex來驗證電子郵件地址。 電子郵件地址驗證內置於.NET框架中,因此您不應該為這種情況重新創建輪子。
一個執行兩個檢查的簡單驗證函數如下所示:
public static bool IsValidEmailAddress(string emailAddress, bool verifyDomain = true)
{
var result = false;
if (!string.IsNullOrWhiteSpace(emailAddress))
{
try
{
// Check Format (Offline).
var addy = new MailAddress(emailAddress);
if (verifyDomain)
{
// Check that a valid MX record exists (Online).
result = new DnsStubResolver().Resolve<MxRecord>(addy.Host, RecordType.Mx).Any();
}
else
{
result = true;
}
}
catch (SocketException)
{
result = false;
}
catch (FormatException)
{
result = false;
}
}
return result;
}
要運行代碼,您需要安裝NuGet包ARSoft.Tools.Net
,這是MX記錄查找*所必需的,並且需要為所使用的各種類添加適當的using聲明(在VisualStudio中應該是非常自動的)這些日子)。
(*:僅通過System.Net.Dns.GetHost*
檢查有效的主機名是不夠的,因為對於某些只有MX條目的域,例如admin@fubar.onmicrosoft.com
,這可能會給您帶來一些負面的負面admin@fubar.onmicrosoft.com
,等等。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.