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


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


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


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


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#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
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 "somename@gmail.com.in.in.in" como dirección de correo electrónico válida ... !!
Curiosidad

99
@ParthTrivedi ¿Por qué insiste en que somename@gmail.com.in.in.inno 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);
}

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[] {
        "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
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);

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

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

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

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


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

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

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


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

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

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

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)


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

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;

}

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


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

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


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

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


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

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.


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.


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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.