Regex Validación de correo electrónico

215

yo uso esto

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

regexp para validar el correo electrónico

([\w\.\-]+)- esto es para el dominio de primer nivel (muchas letras y números, también puntos y guiones)

([\w\-]+)- esto es para el dominio de segundo nivel

((\.(\w){2,3})+)- y esto es para otros dominios de nivel (del 3 al infinito) que incluye un punto y 2 o 3 literales

¿Qué tiene de malo esta expresión regular?

EDITAR: no coincide con el correo electrónico "[email protected]"

Sergey
fuente
1
Aparte de que no incluye caracteres válidos, como se especifica en los RFC 5321 y 5322, nada.
Brad Christie
Creo que tiene que decirnos qué está mal y luego otros aquí pueden ayudarlo a solucionar el problema.
Uwe Keim
10
Tienes un problema -> crees que 'regex' -> ahora tienes 2 problemas ;-)
Jakub Konecki
1
Solo un comentario sobre tu expresión regular. Con estos nuevos dominios .amsterdam, .info y otros dominios, la expresión regular debería ser:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Respuestas:

371

Los TLD como .museum no se corresponden de esta manera, y hay algunos otros TLD largos. Además, puede validar las direcciones de correo electrónico utilizando la clase MailAddress como Microsoft explica aquí en una nota:

En lugar de usar una expresión regular para validar una dirección de correo electrónico, puede usar la clase System.Net.Mail.MailAddress. Para determinar si una dirección de correo electrónico es válida, pase la dirección de correo electrónico al constructor de la clase MailAddress.MailAddress (String).

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

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

Esto te ahorra muchos dolores de cabeza porque no tienes que escribir (o tratar de entender la expresión regular de otra persona).

Alex
fuente
63
Esto no detectó puntos dobles ".." ni espacios en línea ".". Iré con la expresión regular en su lugar
Benny Skogberg
33
A pesar de esto, es una respuesta popular. No es correcto, no puede capturar al menos dos formatos no válidos: "Abc. @ Example.com", "Abc..123 @ example.com"
sean717
12
@ sean717: Vea el RFC y / o el enlace . Estoy de acuerdo en que sus ejemplos probablemente no funcionarán en el mundo real, pero eso no los invalida.
Dan Pichelman
13
Si está funcionando o no usando try catch para validar la entrada no es una práctica recomendada. Regex es definitivamente el mejor camino a seguir.
mrt
159
-1 Mal código. Capturar una excepción no es la forma de validar los campos.
ken2k
99

Creo que @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"debería funcionar.
Necesitas escribirlo como

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

Tenga en cuenta que esto fallará si:

  1. Hay un subdominio después del @símbolo.

  2. Utiliza un TLD con una longitud superior a 3, como .info

Avinash
fuente
2
Devuelve [email protected] como válido. Debería ser inválido.
Mathias F
77
Creo que esto fallará en los nuevos TLD que se emiten, ya que ahora puede tener TLD con más de 3 caracteres.
AaronLS
Esta expresión regular permite que "[email protected]" sea válido.
Curiosidad
14
gmail.com.in.in.in.in es un nombre de dominio perfectamente válido, así que no puedo ver por qué no debería permitirse.
larsw
De acuerdo con @larsw, la expresión regular no debe usarse
Boris Sokolov
68

Tengo una expresión para verificar las direcciones de correo electrónico que uso.

Como ninguno de los anteriores fue tan corto o preciso como el mío, pensé en publicarlo aquí.

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

Para obtener más información, lea aquí: C # - Expresión regular de correo electrónico

Además, esto verifica la validez de RFC en función de la sintaxis del correo electrónico, no si el correo electrónico realmente existe. La única forma de probar que realmente existe un correo electrónico es enviar un correo electrónico y hacer que el usuario verifique que recibió el correo electrónico haciendo clic en un enlace o ingresando un token.

Luego están los dominios descartables, como Mailinator.com y otros. Esto no hace nada para verificar si un correo electrónico es de un dominio desechable o no.

Rhyous
fuente
Ese era el que estaba buscando, ¡gracias! Toma dos puntos dobles ".." y espacios en blanco ".".
Benny Skogberg
55
Actualicé mi proyecto de expresión regular para tener pruebas unitarias e incluso arreglé un par de errores: C # - Expresión regular de correo electrónico rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous
Con los nuevos TLD, quizás deberíamos reemplazar [a-zA-Z] {2,4} en la tercera línea con un {0} y luego hacer un string.format (pattern, pipeSeparatedAllowedTlds) donde pipeSeparatedAllowedTlds tendría que ser creado por iterando a través de este archivo: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous
12
Parth ¿Me puede decir qué regla de RFC se rompe con su correo electrónico? Porque adivina qué. De acuerdo con RFC, ¡es válido! Si compró la URL in.in, podría crear esta dirección de correo electrónico. ¿Entender?
Rhyous
2
En realidad, parece que ya actualicé eso en mi github aquí: github.com/rhyous/EmailRegEx . Sin embargo, \ w puede incluir guiones bajos, por lo que es posible que tenga que editarlo para mayor precisión.
Rhyous
36

Encontré un buen documento en MSDN para ello.

Cómo: Verificar que las cadenas están en formato de correo electrónico válido http://msdn.microsoft.com/en-us/library/01escwtf.aspx (compruebe que este código también admite el uso de caracteres no ASCII para nombres de dominio de Internet. )

Hay 2 implementaciones, para .Net 2.0 / 3.0 y para .Net 3.5 y superior.
la versión 2.0 / 3.0 es:

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})(\]?)$"); 
}

Mis pruebas sobre este método dan:

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
fuente
1
No coincide[me]@whatever.museum
Toto
Inválido: Abc.example.com SÍ, eso funciona correctamente, sin embargo, este "toms.email. @ Gmail.com"; no funciona
Tom Stickel
1
Tuve que agregar un signo más: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 el carácter que queda en] Google y el alias de hotmail permiten el signo más en la primera sección antes del signo @.
Henk J Meulekamp
Esto es lo mismo que arriba. permitiendo "[email protected]" como dirección de correo electrónico válida ... !!
Curiosidad
99
@ParthTrivedi ¿Por qué insiste en que [email protected]no es una dirección de correo electrónico válida?
Ivaylo Slavov
15

El siguiente código se basa en la implementación de anotaciones de datos de Microsoft en github y creo que es la validación más completa para correos electrónicos:

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
fuente
1
Es bueno obtener esto de una fuente profesional (nada, por supuesto, en contra de los demás); apreciado.
Nicholas Petersen
1
Esta debería ser la mejor expresión regular porque parece validar los RFC 5321 y 5322. Faltan algunas pruebas unitarias.
ToXinE
No captura el punto al final de la dirección de correo electrónico.
Sellorio
12

Esto no cumple con todos los requisitos de los RFC 5321 y 5322, pero funciona con las siguientes definiciones.

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

Debajo está el código

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
fuente
1
esta expresión no coincide con direcciones válidas !#$%&'*+-/=?^_. {|} ~ @ example.com` o estaDörte@Sörensen.example.com
TS
7

Mejor regex de validación de correo electrónico

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

Y su uso: -

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
fuente
6

Probar esto para el tamaño:

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
fuente
5

Prueba esto, está funcionando para mí:

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
fuente
5

Esta expresión regular funciona perfectamente:

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
fuente
4

Este evita los correos electrónicos no válidos mencionados por otros en los comentarios:

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

También evita los correos electrónicos con puntos dobles:

hello..world@example..com

Intente probarlo con tantas direcciones de correo electrónico no válidas como pueda encontrar.

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

Vea validar la dirección de correo electrónico utilizando expresiones regulares en C # .

Friki
fuente
Esto devuelve falso para todas mis direcciones de correo electrónico no válidas. Lamentablemente, también devuelve falso para muchas direcciones de correo electrónico válidas.
Mark
4

¿Por qué no utilizar la validación de correo electrónico basada en atributos EF6?

Como puede ver arriba, la validación de Regex para correo electrónico siempre tiene algún hueco. Si está utilizando anotaciones de datos EF6, puede lograr fácilmente una validación de correo electrónico confiable y más fuerte con el atributo de anotación de datos EmailAddress disponible para eso. Tuve que eliminar la validación de expresiones regulares que usé antes para el correo electrónico cuando recibí un error de expresión regular específico del dispositivo móvil en el campo de entrada de correo electrónico. Cuando se utilizó el atributo de anotación de datos para la validación del correo electrónico, se resolvió el problema en dispositivos móviles.

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

Utilizo el código anterior para validar la dirección de correo electrónico.

Ramesh
fuente
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
fuente
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo
AStopher
1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);
StefanL19
fuente
1

Se han realizado muchos intentos para crear un validador de correo electrónico que cumpla con casi todos los requisitos mundiales de correo electrónico.

Método de extensión al que puede llamar con:

myEmailString.IsValidEmailAddress();

Cadena de patrón de expresiones regulares que puede obtener llamando a:

var myPattern = Regex.EmailPattern;

El Código (principalmente comentarios):

    /// <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
fuente
1

Para validar su ID de correo electrónico, simplemente puede crear dicho método y usarlo.

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

Esto devolverá Verdadero / Falso. (ID de correo electrónico válido / no válido)

Palak Patel
fuente
1

Este es mi enfoque favorito hasta ahora:

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

Luego use la extensión de cadena creada como:

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

Solo avíseme SI no funciona :)

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
fuente
1

Aquí está nuestro Regex para este caso:

@"^([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})(\]?)$",

Hay tres partes, que se verifican. el último es probablemente el que necesita. el término específico {2,6} le indica la longitud mínima / máxima del TLD al final. HTH

GreenLion
fuente
0

Pruebe el siguiente código:

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
fuente
0

BÚSQUEDA DE CADENA CON EL MÉTODO REGEX EN C #

¿Cómo validar un correo electrónico por expresión regular?

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

Utilice el método String.Regex () de referencia

Manish
fuente
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
fuente
0

Creo que su símbolo de intercalación y dólar son parte del problema. También debe modificar un poco la expresión regular, utilizo la siguiente @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "

ABMoharram
fuente
Cuando usa el resultado Trim (':')
ABMoharram
0

Patrón de correo electrónico de expresiones regulares:

^(?:[\\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
fuente
0

He estado usando Regex.IsMatch ().

En primer lugar, debe agregar la siguiente declaración:

using System.Text.RegularExpressions;

Entonces el método se ve así:

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

Es un método privado debido a mi lógica, pero puede poner el método como estático en otra capa como "Utilidades" y llamarlo desde donde lo necesite.

Una gran noticia
fuente
0

No hay una expresión regular perfecta, pero esta es bastante fuerte, creo, basada en el estudio de RFC5322 . Y con la interpolación de cadenas C #, creo que también es bastante fácil de seguir.

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

Vetted con NUnit 2.x.

mwpowellhtx
fuente
0

He creado una clase FormValidationUtils para validar el correo electrónico:

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
fuente
0

Validación de correo electrónico usando 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 ");
   }

Fuente: validación de correo electrónico c #

Validación sin expresión regular utilizando el constructor de clase MailAddress.MailAddress (String)

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}
usuario3559462
fuente
Esto no coincidirá me@localhost. Por favor, eche un vistazo a estos sitios: lista de TLD ; direcciones válidas / inválidas ; regex para la dirección de correo electrónico RFC822
Toto