Validação de email Regex

215

Eu uso isso

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

regexp para validar o email

([\w\.\-]+)- refere-se ao domínio de primeiro nível (muitas letras e números, também apontar e hífen)

([\w\-]+)- refere -se ao domínio de segundo nível

((\.(\w){2,3})+)- e refere-se a outros domínios de nível (de 3 ao infinito), que inclui um ponto e 2 ou 3 literais

o que há de errado com este regex?

EDIT: não corresponde ao email "[email protected]"

Sergey
fonte
1
Além de você não incluir caracteres válidos, conforme especificado pelos RFCs 5321 e 5322 --nenhum.
Brad Christie
Eu acho que você tem que nos dizer o que há de errado e, em seguida, outros aqui podem ajudá-lo a consertar a coisa errada.
precisa
10
Você tem um problema -> você pensa 'regex' -> agora você tem 2 problemas ;-)
Jakub Konecki
1
Apenas um comentário sobre seu regex. Com esses novos domínios .amsterdam, .info e outros, o regex deve ser:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$""
Ton Snoei

Respostas:

371

Os TLDs como .museum não são compatíveis dessa maneira, e existem outros TLDs longos. Além disso, você pode validar endereços de email usando a classe MailAddress, como a Microsoft explica aqui em uma observação:

Em vez de usar uma expressão regular para validar um endereço de email, você pode usar a classe System.Net.Mail.MailAddress. Para determinar se um endereço de email é válido, passe o endereço de email para o construtor da classe MailAddress.MailAddress (String).

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

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

Isso evita muitas dores de cabeça porque você não precisa escrever (ou tentar entender a regex de outra pessoa).

Alex
fonte
63
Isso não pegou pontos duplos ".." nem espaços em linha ".". Eu vou com o regex em vez
Benny Skogberg
33
Apesar disso, é uma resposta popular. Não é certo, não pegar pelo menos dois formatos inválidos: "Abc @ example.com.", "Abc..123 @ example.com"
sean717
12
@ sean717: Veja o RFC e / ou link . Concordo que seus exemplos provavelmente não funcionarão no mundo real, mas isso não os torna inválidos.
Dan Pichelman
13
Se está funcionando ou não usando o try catch para validar a entrada, não é uma prática recomendada. Regex é definitivamente o melhor caminho a percorrer.
Mrt
159
-1 Código inválido. Capturar uma exceção não é o caminho para validar campos.
ken2k
99

Eu acho que @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"deveria funcionar.
Você precisa escrever 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");

Esteja avisado de que isso falhará se:

  1. Há um subdomínio após o @símbolo.

  2. Você usa um TLD com um comprimento maior que 3, como .info

Avinash
fonte
2
Retorna [email protected] como válido. Deve ser inválido.
Mathias F
7
Acredito que isso falhará nos novos TLDs que estão sendo emitidos, pois você pode ter TLDs com mais de 3 caracteres agora.
AaronLS
Esse regex permite que "[email protected]" seja válido.
Curiosidade
14
gmail.com.in.in.in.in é um nome de domínio perfeitamente válido, por isso não vejo por que não deveria ser permitido?
larsw
Concorde com @larsw, o regex não deve ser usado
Boris Sokolov
68

Eu tenho uma expressão para verificar os endereços de email que eu uso.

Como nenhuma das opções acima é tão curta ou precisa quanto a minha, pensei em publicá-la aqui.

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

Para obter mais informações, leia sobre isso aqui: C # - Expressão regular por email

Além disso, isso verifica a validade da RFC com base na sintaxe do email, não se o email realmente existe. A única maneira de testar se um email realmente existe é enviá-lo e enviá-lo por email e fazer com que o usuário verifique se recebeu o email clicando em um link ou inserindo um token.

Depois, existem domínios descartáveis, como Mailinator.com e outros. Isso não faz nada para verificar se um email é de um domínio descartável ou não.

Rhyous
fonte
Esse é o que eu estava procurando - thanx! Pega dois pontos duplos ".." e espaços em branco ".".
Benny Skogberg
5
Eu atualizei meu projeto expressão regular para ter testes de unidade e eu mesmo fixa um par de erros: C # - Email expressão regular rhyous.com/2010/06/15/csharp-email-regular-expression
Rhyous
Com os novos TLDs, talvez devêssemos substituir [a-zA-Z] {2,4} na terceira linha por {0} e, em seguida, executando uma string.format (pattern, pipeSeparatedAllowedTlds) em que pipeSeparatedAllowedTlds teria que ser criado por iterando através deste arquivo: data.iana.org/TLD/tlds-alpha-by-domain.txt
Rhyous
12
Parth. Você pode me dizer qual regra RFC é violada pelo seu email? Porque adivinhem. Segundo a RFC, é válido !!!! Se você comprou o URL in.in, pode criar este endereço de email. Compreendo?
Rhyous
2
Na verdade, parece que eu já atualizei isso no meu github aqui: github.com/rhyous/EmailRegEx . No entanto, \ w pode incluir sublinhados, portanto, talvez seja necessário editá-lo para ter precisão.
Rhyous 26/10/19
36

Encontrei um bom documento no MSDN para isso.

Como verificar se as seqüências de caracteres estão no formato de email válido http://msdn.microsoft.com/en-us/library/01escwtf.aspx (verifique se esse código também oferece suporte ao uso de caracteres não ASCII para nomes de domínio da Internet. )

Existem 2 implementações, para .Net 2.0 / 3.0 e para .Net 3.5 e superior.
a versão 2.0 / 3.0 é:

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

Meus testes sobre esse método fornecem:

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
fonte
1
Não corresponde[me]@whatever.museum
Toto
Inválido: Abc.example.com SIM, que funciona corretamente, no entanto, este "toms.email. @ Gmail.com"; não funciona
Tom Stickel
1
Foi necessário adicionar um sinal de adição: `@" ^ ([\ w - \. +] +) @ (([[0-9] {1,3} \. [0-9] {1,3} \. [0-9] {1,3} \.) | (([\ W -] + \.) +)) ([A-zA-Z] {2,4} | [0-9] {1, 3}) (]?) $ "` 11 o caractere deixado no] Aliassing do Google e do hotmail permitem o sinal de adição na primeira seção antes de @ sign.
Henk J Meulekamp
É o mesmo que acima. permitindo "[email protected]" como endereço de email válido ... !!
Curiosidade
9
@ParthTrivedi Por que você insiste que [email protected]não é um endereço de email válido?
Ivaylo Slavov
15

O código a seguir é baseado na implementação de anotações de dados da Microsoft no github e acho que é a validação mais completa para e-mails:

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
fonte
1
É bom obter isso de uma fonte profissional (nada é claro contra os outros); estimado.
Nicholas Petersen
1
Esse deve ser o melhor regex, pois parece validar os RFCs 5321 e 5322. Falta alguns testes de unidade.
ToXinE
Não captura ponto no final do endereço de email.
Sellorio 20/01/19
12

Isso não atende a todos os requisitos das RFCs 5321 e 5322, mas funciona com as seguintes definições.

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

Abaixo está o 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
fonte
1
esta expressão não corresponde a endereços válidos !#$%&'*+-/=?^_. {|} ~ @ example.com` ou estaDörte@Sörensen.example.com
TS
7

Melhor regex de validação de email

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

E é 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
fonte
6

Tente isso para obter o tamanho:

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

Tente isso, está funcionando para mim:

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

Essa regex funciona perfeitamente:

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

Este impede emails inválidos mencionados por outras pessoas nos comentários:

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

Também evita e-mails com pontos duplos:

hello..world@example..com

Tente testá-lo com o maior número possível de endereços de e-mail inválidos.

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

Consulte validar endereço de email usando expressão regular em C # .

Nerd
fonte
Isso retorna falso para todos os meus endereços de email inválidos. Infelizmente, também retorna false para muitos endereços de email válidos.
13288 Mark
4

Por que não usar a validação de e-mail baseada em atributo EF6?

Como você pode ver acima, a validação do Regex para email sempre tem algum furo. Se você estiver usando anotações de dados EF6, poderá obter facilmente uma validação de email confiável e mais forte com o atributo de anotação de dados EmailAddress disponível para isso. Eu tive que remover a validação de regex que usei anteriormente para email quando recebi uma falha de regex específica do dispositivo móvel no campo de entrada de email. Quando o atributo de anotação de dados usado para validação de email, o problema no celular foi resolvido.

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

Eu uso o código acima para validar o endereço de email.

Ramesh
fonte
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
fonte
Embora esse código pode responder à pergunta, fornecendo contexto adicionais sobre por que e / ou como este código responde à pergunta melhora o seu valor a longo prazo
AStopher
1
string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);
StefanL19
fonte
1

Foram necessárias muitas tentativas para criar um validador de email que atenda a quase todos os requisitos mundiais de email.

Método de extensão que você pode chamar com:

myEmailString.IsValidEmailAddress();

Você pode obter a sequência padrão Regex chamando:

var myPattern = Regex.EmailPattern;

O Código (principalmente comentários):

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

Para validar seu ID de email, você pode simplesmente criar esse método e usá-lo.

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

Isso retornará Verdadeiro / Falso. (ID de email válido / inválido)

Palak Patel
fonte
1

Esta é a minha abordagem favorita até agora:

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

Em seguida, use a extensão de string criada como:

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

Deixe-me saber se não funcionar :)

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

aqui está o nosso 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})(\]?)$",

existem três partes, que são marcadas. o último é provavelmente o que você precisa. o termo específico {2,6} indica o comprimento mínimo / máximo do TLD no final. HTH

GreenLion
fonte
0

Experimente o seguinte 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
fonte
0

PESQUISA DE STRING USANDO O MÉTODO REGEX EM C #

Como validar um email por expressão 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);
}

Use o método String.Regex () de referência

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

Eu acho que seu sinal de intercalação e cifrão fazem parte do problema Você também deve modificar um pouco a regex, eu uso o próximo @ "[:] + ([\ w .-] +) @ ([\ w -.]) + ((. (\ w) {2,3}) +) "

ABMoharram
fonte
Quando você usa o resultado Trim (':')
ABMoharram
0

Padrão Regex Email:

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

Eu tenho usado o Regex.IsMatch ().

Antes de tudo, você precisa adicionar a próxima instrução:

using System.Text.RegularExpressions;

Em seguida, o método se parece com:

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

É um método privado por causa da minha lógica, mas você pode colocar o método como estático em outra Camada, como "Utilitários", e chamá-lo de onde você precisa.

Boas notícias
fonte
0

Não existe uma expressão regular perfeita, mas acho que essa é bastante forte, com base no estudo da RFC5322 . E com a interpolação de strings em C #, acho muito 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);

Examinado com NUnit 2.x.

mwpowellhtx
fonte
0

Eu criei uma classe FormValidationUtils para validar o 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
fonte
0

Validação de email 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 ");
   }

Fonte: validação de email c #

Validação sem Regex usando o construtor de classe MailAddress.MailAddress (String)

public bool IsEmailValid(string emailaddress)
{
 try
 {
    MailAddress m = new MailAddress(emailaddress);
    return true;
 }
 catch (FormatException)
 {
    return false;
 }
}
user3559462
fonte
Isso não irá corresponder me@localhost. Por favor, dê uma olhada nestes sites: lista de DPNs ; endereços válidos / inválidos ; regex para o endereço de e-mail RFC822
Toto