Regex Validasi Email

215

Saya menggunakan ini

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

regexp untuk memvalidasi email

([\w\.\-]+)- ini untuk domain tingkat pertama (banyak huruf dan angka, juga titik dan tanda hubung)

([\w\-]+)- ini untuk domain tingkat kedua

((\.(\w){2,3})+)- dan ini untuk domain tingkat lain (dari 3 hingga tak terbatas) yang mencakup titik dan 2 atau 3 literal

apa yang salah dengan regex ini?

EDIT: tidak cocok dengan email "[email protected]"

Sergey
sumber
1
Selain Anda tidak termasuk karakter yang valid, seperti yang ditentukan oleh RFCs 5321 & 5322 - tidak ada.
Brad Christie
Saya pikir Anda harus memberi tahu kami apa yang salah dan kemudian orang lain di sini dapat membantu Anda memperbaiki yang salah.
Uwe Keim
10
Anda memiliki masalah -> Anda pikir 'regex' -> sekarang Anda memiliki 2 masalah ;-)
Jakub Konecki
1
Hanya komentar tentang regex Anda. Dengan domain .amsterdam, .info, dan domain lain yang baru ini, regex seharusnya:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Jawaban:

371

TLD seperti .museum tidak cocok dengan cara ini, dan ada beberapa TLD panjang lainnya. Anda juga dapat memvalidasi alamat email menggunakan kelas MailAddress seperti yang dijelaskan Microsoft di sini dalam sebuah catatan:

Alih-alih menggunakan ekspresi reguler untuk memvalidasi alamat email, Anda bisa menggunakan kelas System.Net.Mail.MailAddress. Untuk menentukan apakah alamat email itu valid, kirimkan alamat email ke konstruktor kelas MailAddress.MailAddress (String).

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

Ini menghemat banyak sakit kepala Anda karena Anda tidak perlu menulis (atau mencoba memahami orang lain) regex.

Alex
sumber
63
Ini tidak menangkap titik ganda ".." atau spasi inline ".". Saya akan pergi dengan regex sebagai gantinya
Benny Skogberg
33
Meskipun ini adalah jawaban yang populer. Itu tidak benar, gagal menangkap setidaknya dua format yang tidak valid: "Abc. @ Example.com", "Abc..123 @ example.com"
sean717
12
@ sean717: Lihat RFC dan / atau link yang . Saya setuju bahwa contoh Anda mungkin tidak akan berfungsi di dunia nyata, tetapi itu tidak membuat mereka tidak valid.
Dan Pichelman
13
Apakah itu berfungsi atau tidak menggunakan coba tangkap untuk memvalidasi input tidak dianjurkan praktik. Regex jelas merupakan cara yang lebih baik.
mrt
159
-1 Sepotong kode salah. Menangkap pengecualian bukanlah cara untuk memvalidasi bidang.
ken2k
99

Saya pikir @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"harus bekerja.
Anda perlu menulis seperti itu

string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
    Response.Write(email + " is correct");
else
    Response.Write(email + " is incorrect");

Berhati-hatilah bahwa ini akan gagal jika:

  1. Ada subdomain setelah @simbol.

  2. Anda menggunakan TLD dengan panjang lebih dari 3, seperti .info

Avinash
sumber
2
Mengembalikan [email protected] sebagai valid. Seharusnya tidak valid.
Mathias F
7
Saya percaya ini akan gagal pada TLD baru yang sedang diterbitkan, karena Anda dapat memiliki TLD dengan lebih dari 3 karakter sekarang.
AaronLS
Regex ini memungkinkan "[email protected]" valid.
Curiosity
14
gmail.com.in.in.in.in adalah nama domain yang benar-benar valid, jadi saya tidak bisa melihat mengapa itu tidak boleh?
larsw
Setuju dengan @ larsw regex tidak boleh digunakan
Boris Sokolov
68

Saya memiliki ekspresi untuk memeriksa alamat email yang saya gunakan.

Karena tidak satu pun di atas yang pendek atau seakurat milik saya, saya pikir saya akan mempostingnya di sini.

@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
+ "@"
+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$";

Untuk info lebih lanjut baca tentang ini di sini: C # - Email Regular Expression

Juga, ini memeriksa validitas RFC berdasarkan sintaks email, bukan untuk apakah email itu benar-benar ada. Satu-satunya cara untuk menguji apakah email itu benar-benar ada adalah mengirim dan mengirim email dan meminta pengguna memverifikasi mereka menerima email dengan mengklik tautan atau memasukkan token.

Lalu ada domain yang dibuang, seperti Mailinator.com, dan semacamnya. Ini tidak melakukan apa pun untuk memverifikasi apakah email berasal dari domain yang dibuang atau tidak.

Rhyous
sumber
Itulah yang saya cari - thanx! Membawa kedua titik ganda ".." dan spasi putih ".".
Benny Skogberg
5
Saya memperbarui proyek ekspresi reguler saya untuk mendapatkan unit test dan saya bahkan memperbaiki beberapa bug: C # - Email Regular Expression rhyous.com/2010/06/15/csharp-email-
Rhyous
Dengan TLD baru, kita mungkin harus mengganti [a-zA-Z] {2,4} di baris ketiga dengan {0} dan kemudian melakukan string.format (pola, pipeSeparatedAllowedTlds) di mana pipeSeparatedAllowedTlds harus dibuat oleh iterasi melalui file ini: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous
12
Parth. Bisakah Anda memberi tahu saya aturan RFC apa yang dilanggar oleh email Anda? Karena coba tebak. Menurut RFC, ini valid !!!! Jika Anda membeli di URL dalam, Anda dapat membuat alamat email ini. Memahami?
Rhyous
2
Sebenarnya, sepertinya saya sudah memperbarui itu di github saya di sini: github.com/rhyous/EmailRegEx . Namun, \ w dapat menyertakan garis bawah, jadi saya mungkin harus mengeditnya untuk keakuratan.
Rhyous
36

Saya menemukan dokumen yang bagus di MSDN untuk itu.

Cara: Pastikan Strings dalam Format Email Valid http://msdn.microsoft.com/en-us/library/01escwtf.aspx (periksa bahwa kode ini juga mendukung penggunaan karakter non-ASCII untuk nama domain Internet. )

Ada 2 implementasi, untuk .Net 2.0 / 3.0 dan untuk .Net 3.5 dan lebih tinggi.
versi 2.0 / 3.0 adalah:

bool IsValidEmail(string strIn)
{
    // Return true if strIn is in valid e-mail format.
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
}

Tes saya atas metode ini memberikan:

Invalid: @majjf.com
Invalid: A@b@c@example.com
Invalid: Abc.example.com
Valid: j..s@proseware.com
Valid: j.@server1.proseware.com
Invalid: js*@proseware.com
Invalid: js@proseware..com
Valid: ma...ma@jjf.co
Valid: ma.@jjf.com
Invalid: ma@@jjf.com
Invalid: ma@jjf.
Invalid: ma@jjf..com
Invalid: ma@jjf.c
Invalid: ma_@jjf
Invalid: ma_@jjf.
Valid: ma_@jjf.com
Invalid: -------
Valid: 12@hostname.com
Valid: d.j@server1.proseware.com
Valid: david.jones@proseware.com
Valid: j.s@server1.proseware.com
Invalid: j@proseware.com9
Valid: j_9@[129.126.118.1]
Valid: jones@ms1.proseware.com
Invalid: js#[email protected]
Invalid: js@proseware.com9
Invalid: js@proseware.com9
Valid: m.a@hostname.co
Valid: m_a1a@hostname.com
Valid: ma.h.saraf.onemore@hostname.com.edu
Valid: ma@hostname.com
Invalid: ma@hostname.comcom
Invalid: MA@hostname.coMCom
Valid: ma12@hostname.com
Valid: ma-a.aa@hostname.com.edu
Valid: ma-a@hostname.com
Valid: ma-a@hostname.com.edu
Valid: ma-a@1hostname.com
Valid: ma.a@1hostname.com
Valid: ma@1hostname.com
mr.baby123
sumber
1
Tidak cocok[me]@whatever.museum
Toto
Tidak valid: Abc.example.com YA, yang berfungsi dengan benar, namun, "toms.email. @ Gmail.com" ini; tidak berfungsi
Tom Stickel
1
Harus menambahkan tanda tambah: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 char tersisa di] Google dan hotmail aliassing memungkinkan untuk masuk plus di bagian pertama sebelum @ masuk.
Henk J Meulekamp
Ini sama dengan di atas. memungkinkan "[email protected]" sebagai alamat email yang valid ... !!
Curiosity
9
@ParthTrivedi Mengapa Anda bersikeras bahwa [email protected]itu bukan alamat email yang valid?
Ivaylo Slavov
15

Kode berikut didasarkan pada implementasi anotasi Data Microsoft di github dan saya pikir itu adalah validasi paling lengkap untuk email:

public static Regex EmailValidation()
{
    const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$";
    const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;

    // Set explicit regex match timeout, sufficient enough for email parsing
    // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set
    TimeSpan matchTimeout = TimeSpan.FromSeconds(2);

    try
    {
        if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null)
        {
            return new Regex(pattern, options, matchTimeout);
        }
    }
    catch
    {
        // Fallback on error
    }

    // Legacy fallback (without explicit match timeout)
    return new Regex(pattern, options);
}
CodeArtist
sumber
1
Senang mendapatkan ini dari sumber profesional (tentu saja tidak terhadap yang lain); dihargai.
Nicholas Petersen
1
Ini harus menjadi regex terbaik karena tampaknya memvalidasi RFC 5321 dan 5322. Ini melewatkan beberapa pengujian unit.
ToXinE
Tidak menangkap titik di akhir alamat email.
Sellorio
12

Ini tidak memenuhi semua persyaratan RFC 5321 dan 5322, tetapi berfungsi dengan definisi berikut.

@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

Di bawah ini adalah kode

const String pattern =
   @"^([0-9a-zA-Z]" + //Start with a digit or alphabetical
   @"([\+\-_\.][0-9a-zA-Z]+)*" + // No continuous or ending +-_. chars in email
   @")+" +
   @"@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17})$";

var validEmails = new[] {
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
        "[email protected]",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@[email protected]",   // multiple `@`
        "[email protected]",      // continuous multiple dots in name
        "[email protected]",            // only 1 char in extension
        "[email protected]",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "[email protected]",         // nothing after `.`
        "[email protected]",         // nothing after `_`
        "ma_@jjf",             // no domain extension 
        "ma_@jjf.",            // nothing after `_` and .
        "ma@jjf.",             // nothing after `.`
    };

foreach (var str in validEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
foreach (var str in invalidEmails)
{
    Console.WriteLine("{0} - {1} ", str, Regex.IsMatch(str, pattern));
}
Maheep
sumber
1
ungkapan ini tidak cocok dengan alamat yang valid !#$%&'*+-/=?^_. {|} ~ @ example.com` atau yang iniDörte@Sörensen.example.com
TS
7

Regex validasi email terbaik

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

Dan penggunaannya: -

bool isEmail = Regex.IsMatch(emailString, @"\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);
Tejas Bagade
sumber
6

Coba ini untuk ukuran:

public static bool IsValidEmailAddress(this string s)
{
    var regex = 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])?");
    return regex.IsMatch(s);
}
Camainc
sumber
5

Coba ini, ini bekerja untuk saya:

public bool IsValidEmailAddress(string s)
{
    if (string.IsNullOrEmpty(s))
        return false;
    else
    {
        var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        return regex.IsMatch(s) && !s.EndsWith(".");
    }
}
Tarek El-Mallah
sumber
5

Regex ini berfungsi dengan baik:

bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))\z");
}
Luca Ziegler
sumber
4

Yang ini mencegah email tidak valid yang disebutkan oleh orang lain di komentar:

Abc.@example.com
Abc..123@example.com
name@hotmail
toms.email.@gmail.com
test@-online.com

Itu juga mencegah email dengan titik ganda:

hello..world@example..com

Cobalah mengujinya dengan sebanyak mungkin alamat email yang tidak valid.

using System.Text.RegularExpressions;

public static bool IsValidEmail(string email)
{
    return Regex.IsMatch(email, @"\A[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}\z")
        && Regex.IsMatch(email, @"^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*");
}

Lihat memvalidasi alamat email menggunakan ekspresi reguler di C # .

Kutu buku
sumber
Ini mengembalikan false untuk semua alamat email saya yang tidak valid. Sayangnya, juga mengembalikan false untuk banyak alamat email yang valid.
Markus
4

Mengapa tidak menggunakan validasi email berbasis atribut EF6?

Seperti yang Anda lihat di atas, validasi Regex untuk email selalu memiliki beberapa lubang di dalamnya. Jika Anda menggunakan anotasi data EF6, Anda dapat dengan mudah mencapai validasi email yang andal dan kuat dengan atribut anotasi data EmailAddress yang tersedia untuk itu. Saya harus menghapus validasi regex yang saya gunakan sebelumnya untuk e-mail ketika saya mengalami kegagalan regex spesifik perangkat seluler pada bidang input e-mail. Ketika atribut anotasi data digunakan untuk validasi email, masalah pada ponsel diselesaikan.

public class LoginViewModel
{
    [EmailAddress(ErrorMessage = "The email format is not valid")]
    public string Email{ get; set; }
Gemunu R Wickremasinghe
sumber
3
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)
Sejuk
sumber
1
public static bool ValidateEmail(string str)
{                       
     return Regex.IsMatch(str, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
}

Saya menggunakan kode di atas untuk memvalidasi alamat email.

Ramesh
sumber
1
   public bool VailidateEntriesForAccount()
    {
       if (!(txtMailId.Text.Trim() == string.Empty))
        {
            if (!IsEmail(txtMailId.Text))
            {
                Logger.Debug("Entered invalid Email ID's");
                MessageBox.Show("Please enter valid Email Id's" );
                txtMailId.Focus();
                return false;
            }
        }
     }
   private bool IsEmail(string strEmail)
    {
        Regex validateEmail = new Regex("^[\\W]*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z] {2,4}[\\W]*,{1}[\\W]*)*([\\w+\\-.%]+@[\\w\\-.]+\\.[A-Za-z]{2,4})[\\W]*$");
        return validateEmail.IsMatch(strEmail);
    }
sindhu jampani
sumber
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya
AStopher
1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);
StefanL19
sumber
1

Diperlukan banyak upaya untuk membuat validator email yang menangkap hampir semua persyaratan email di seluruh dunia.

Metode ekstensi yang dapat Anda hubungi dengan:

myEmailString.IsValidEmailAddress();

Regex pattern string yang bisa Anda dapatkan dengan menelepon:

var myPattern = Regex.EmailPattern;

Kode (kebanyakan komentar):

    /// <summary>
    /// Validates the string is an Email Address...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddress(this string emailAddress)
    {
        var valid = true;
        var isnotblank = false;

        var email = emailAddress.Trim();
        if (email.Length > 0)
        {
            // Email Address Cannot start with period.
            // Name portion must be at least one character
            // In the Name, valid characters are:  a-z 0-9 ! # _ % & ' " = ` { } ~ - + * ? ^ | / $
            // Cannot have period immediately before @ sign.
            // Cannot have two @ symbols
            // In the domain, valid characters are: a-z 0-9 - .
            // Domain cannot start with a period or dash
            // Domain name must be 2 characters.. not more than 256 characters
            // Domain cannot end with a period or dash.
            // Domain must contain a period
            isnotblank = true;
            valid = Regex.IsMatch(email, Regex.EmailPattern, RegexOptions.IgnoreCase) &&
                !email.StartsWith("-") &&
                !email.StartsWith(".") &&
                !email.EndsWith(".") && 
                !email.Contains("..") &&
                !email.Contains(".@") &&
                !email.Contains("@.");
        }

        return (valid && isnotblank);
    }

    /// <summary>
    /// Validates the string is an Email Address or a delimited string of email addresses...
    /// </summary>
    /// <param name="emailAddress"></param>
    /// <returns>bool</returns>
    public static bool IsValidEmailAddressDelimitedList(this string emailAddress, char delimiter = ';')
    {
        var valid = true;
        var isnotblank = false;

        string[] emails = emailAddress.Split(delimiter);

        foreach (string e in emails)
        {
            var email = e.Trim();
            if (email.Length > 0 && valid) // if valid == false, no reason to continue checking
            {
                isnotblank = true;
                if (!email.IsValidEmailAddress())
                {
                    valid = false;
                }
            }
        }
        return (valid && isnotblank);
    }

    public class Regex
    {
        /// <summary>
        /// Set of Unicode Characters currently supported in the application for email, etc.
        /// </summary>
        public static readonly string UnicodeCharacters = "À-ÿ\p{L}\p{M}ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß"; // German and French

        /// <summary>
        /// Set of Symbol Characters currently supported in the application for email, etc.
        /// Needed if a client side validator is being used.
        /// Not needed if validation is done server side.
        /// The difference is due to subtle differences in Regex engines.
        /// </summary>
        public static readonly string SymbolCharacters = @"!#%&'""=`{}~\.\-\+\*\?\^\|\/\$";

        /// <summary>
        /// Regular Expression string pattern used to match an email address.
        /// The following characters will be supported anywhere in the email address:
        /// ÀàÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü«»€₣äÄöÖüÜß[a - z][A - Z][0 - 9] _
        /// The following symbols will be supported in the first part of the email address(before the @ symbol):
        /// !#%&'"=`{}~.-+*?^|\/$
        /// Emails cannot start or end with periods,dashes or @.
        /// Emails cannot have two @ symbols.
        /// Emails must have an @ symbol followed later by a period.
        /// Emails cannot have a period before or after the @ symbol.
        /// </summary>
        public static readonly string EmailPattern = String.Format(
            @"^([\w{0}{2}])+@{1}[\w{0}]+([-.][\w{0}]+)*\.[\w{0}]+([-.][\w{0}]+)*$",                     //  @"^[{0}\w]+([-+.'][{0}\w]+)*@[{0}\w]+([-.][{0}\w]+)*\.[{0}\w]+([-.][{0}\w]+)*$",
            UnicodeCharacters,
            "{1}",
            SymbolCharacters
        );
    }
Jason Williams
sumber
1

Untuk memvalidasi ID email Anda, Anda cukup membuat metode seperti itu dan menggunakannya.

    public static bool IsValidEmail(string email)
    {
        var r = new Regex(@"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
        return !String.IsNullOrEmpty(email) && r.IsMatch(email);
    }

Ini akan mengembalikan Benar / Salah. (Id Email Valid / Tidak Valid)

Palak Patel
sumber
1

Ini adalah pendekatan favorit saya sejauh ini:

public static class CommonExtensions
{
    public static bool IsValidEmail(this string thisEmail)
        => !string.IsNullOrWhiteSpace(thisEmail) &&
           new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$").IsMatch(thisEmail);
}

Kemudian gunakan ekstensi string yang dibuat seperti:

if (!emailAsString.IsValidEmail()) throw new Exception("Invalid Email");
Mariano Peinador
sumber
1

Beri tahu saya JIKA tidak berhasil :)

public static bool isValidEmail(this string email)
{

    string[] mail = email.Split(new string[] { "@" }, StringSplitOptions.None);

    if (mail.Length != 2)
        return false;

    //check part before ...@

    if (mail[0].Length < 1)
        return false;

    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-\.]+$");
    if (!regex.IsMatch(mail[0]))
        return false;

    //check part after @...

    string[] domain = mail[1].Split(new string[] { "." }, StringSplitOptions.None);

    if (domain.Length < 2)
        return false;

    regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_\-]+$");

    foreach (string d in domain)
    {
        if (!regex.IsMatch(d))
            return false;
    }

    //get TLD
    if (domain[domain.Length - 1].Length < 2)
        return false;

    return true;

}
Roni Tovi
sumber
1

di sini adalah Regex kami untuk kasus ini:

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

ada tiga bagian, yang checcked. yang terakhir mungkin yang Anda butuhkan. istilah spesifik {2,6} menunjukkan Anda panjang min / maks TLD di akhir. HTH

GreenLion
sumber
0

Coba Kode Berikut:

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");
Leelu Halwan
sumber
0

STRING SEARCH MENGGUNAKAN METODE REGEX DI C #

Bagaimana cara memvalidasi Email dengan Ekspresi Reguler?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

Gunakan Reference String.Regex () Method

Manish
sumber
0

1

^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$

2

^(([^<>()[\]\\.,;:\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,}))$
Rae Lee
sumber
0

Saya pikir tanda karat dan dolar Anda adalah bagian dari masalah. Anda juga harus memodifikasi regex sedikit, saya menggunakan @ berikutnya [": + + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "

ABMoharram
sumber
Ketika Anda menggunakan hasil Trim (':')
ABMoharram
0

Pola Email Regex:

^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$
Mosatafa Ghanatabadi
sumber
0

Saya telah menggunakan Regex.IsMatch ().

Pertama-tama Anda perlu menambahkan pernyataan berikut:

using System.Text.RegularExpressions;

Maka metodenya terlihat seperti:

private bool EmailValidation(string pEmail)
{
                 return Regex.IsMatch(pEmail,
                 @"^(?("")("".+?(?<!\\)""@)|(([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));
}

Ini adalah metode pribadi karena logika saya tetapi Anda dapat menempatkan metode ini sebagai statis di Layer lain seperti "Utilities" dan menyebutnya dari mana yang Anda butuhkan.

Kabar baik
sumber
0

Tidak ada ekspresi reguler yang sempurna, tapi yang ini cukup kuat, saya pikir, berdasarkan studi RFC5322 . Dan dengan interpolasi string C #, cukup mudah diikuti, saya pikir, juga.

const string atext = @"a-zA-Z\d!#\$%&'\*\+-/=\?\^_`\{\|\}~";
var localPart = $"[{atext}]+(\\.[{atext}]+)*";
var domain = $"[{atext}]+(\\.[{atext}]+)*";
Assert.That(() => EmailRegex = new Regex($"^{localPart}@{domain}$", Compiled), 
Throws.Nothing);

Diperiksa dengan NUnit 2.x.

mwpowellhtx
sumber
0

Saya telah membuat kelas FormValidationUtils untuk memvalidasi email:

public static class FormValidationUtils
{
    const string ValidEmailAddressPattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";

    public static bool IsEmailValid(string email)
    {
        var regex = new Regex(ValidEmailAddressPattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(email);
    }
}
Waqar UlHaq
sumber
0

Validasi email menggunakan regex

    string pattern = @"\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";

    //check first string
   if (Regex.IsMatch(EmailId1 , pattern))
   {    
       //if email is valid
        Console.WriteLine(EmailId1+ " is a valid Email address ");
   }

Sumber: validasi email c #

Validasi Tanpa Regex menggunakan konstruktor kelas MailAddress.MailAddress (String)

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}
pengguna3559462
sumber
Ini tidak akan cocok me@localhost. Silakan, lihat situs-situs ini: Daftar TLD ; alamat yang valid / tidak valid ; regex untuk alamat email RFC822
Toto