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 "something@someth.ing"


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.


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


2
Mengembalikan test@-online.com 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 "somename@gmail.com.in.in.in.in" 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.


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#internal@proseware.com
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

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 "somename@gmail.com.in.in.in" sebagai alamat email yang valid ... !!
Curiosity

9
@ParthTrivedi Mengapa Anda bersikeras bahwa somename@gmail.com.in.in.initu 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);
}

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[] {
        "ma@hostname.com",
        "ma@hostname.comcom",
        "MA@hostname.coMCom",
        "m.a@hostname.co",
        "m_a1a@hostname.com",
        "ma-a@hostname.com",
        "ma-a@hostname.com.edu",
        "ma-a.aa@hostname.com.edu",
        "ma.h.saraf.onemore@hostname.com.edu",
        "ma12@hostname.com",
        "12@hostname.com",
};
var invalidEmails = new[] {
        "Abc.example.com",     // No `@`
        "A@b@c@example.com",   // multiple `@`
        "ma...ma@jjf.co",      // continuous multiple dots in name
        "ma@jjf.c",            // only 1 char in extension
        "ma@jjf..com",         // continuous multiple dots in domain
        "ma@@jjf.com",         // continuous multiple `@`
        "@majjf.com",          // nothing before `@`
        "ma.@jjf.com",         // nothing after `.`
        "ma_@jjf.com",         // 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));
}

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);

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);
}

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(".");
    }
}

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");
}

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 # .


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; }

3
new System.ComponentModel.DataAnnotations.EmailAddressAttribute().IsValid(input)

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.


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);
    }

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);

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
        );
    }

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)


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");

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;

}

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


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.");

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


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,}))$

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}) +) "


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])\\]))$

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.


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.


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);
    }
}

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;
 }
}

Ini tidak akan cocok me@localhost. Silakan, lihat situs-situs ini: Daftar TLD ; alamat yang valid / tidak valid ; regex untuk alamat email RFC822
Toto
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.