none
C# - Regex - Bug? RRS feed

  • Pergunta

  • Fala galera!

    Fiz um regex que valida um ou mais endereços de email, se mais de um o separador deve ser vírgula.

     Console.WriteLine("Teste Regex\n");
                
                string pattern = @"^(|([\-\a-zA-Z0-9_.]+)@([\-\a-zA-Z0-9_.]+)\.([\-\a-zA-Z]{2,5}){1,25})+([,.](([-\a-zA-Z0-9_.]+)@([\-\a-zA-Z0-9_.]+)\.([\-\a-zA-Z]{2,5}){1,25})+)*$";
                string separadorVirgula = "a@a.com,b@b.com"; //Esse cara deveria passar no regex
                string separadorPontoVirgula = "a@a.com;b@b.com"; //Esse não deveria passar, correspondencia deveria ser Zero
    
                Console.WriteLine("Pattern: " + pattern + "\n");
    
                Regex rgx = new Regex(pattern);
                Console.WriteLine(string.Format("textoComVirgula: {0} possui {1} correspondencias \n", separadorVirgula,  rgx.Matches(separadorVirgula).Count ));
                Console.WriteLine(string.Format("textoComPontoVirgula: {0} possui {1} correspondencias", separadorPontoVirgula, rgx.Matches(separadorPontoVirgula).Count));
                Console.ReadKey();

    Notem que a validação encontra 1 correspondência nos dois cenários, mas deveria encontrar apenas no cenário onde o separador é vírgula.

    Considero que seja um bug pois validando o mesmo regex com as mesmas variáveis no site https://regexr.com/ o comportamento é o esperado.

    Separado por vírgula, 1 correspondencia.

    separado por ponto e vírgula, 0 correspondencia.

    Alguem teve problema similar?

    Valeu!


    Natan



    sexta-feira, 8 de outubro de 2021 14:09

Respostas

  • Natan,

       Eu montei, mas o meu eu peguei como exemplo o Macoratti e não precisava validar vários e-mails de uma só vez.
       Porém achei na internet um que talvez possa te ajudar:

    ===============================================
    Regex para validar vários endereços de email

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

    https://www.ti-enxame.com/pt/c%23/regex-para-validar-varios-enderecos-de-email/941959009/

    ===============================================
    Regex for validating multiple E-Mail-Addresses

    (([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s*|\s*$))*

    https://stackoverflow.com/questions/9809357/regex-for-validating-multiple-e-mail-addresses

    ===============================================

       O que eu montei está aqui:

    ===============================================
    WCF - WINDOWS COMUNICATION FOUNDATION E REGEX C#

    /// <summary>
    /// Validar email
    /// </summary>
    /// <param name="email">email</param>
    /// <returns>Verdadeiro ou Falso</returns>
    /// <remarks>
    /// http://www.macoratti.net/09/09/net_wcf1.htm
    /// A regra para validar e-mails é a seguinte:
    /// http://www.pinceladasdaweb.com.br/blog/2008/01/21/8-expressoes-regulares-para-php-consideradas-uteis/
    /// </remarks>
    public bool ValidarEmail(string email)
    {
        String validaEmail = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-z]{2,4}|[0-9]{1,3})(\\]?)$";
    
        return Regex.IsMatch(email, validaEmail);
    }

    https://www.vbmania.com.br/index.php?modulo=detalhe&id=9439

    ===============================================


       Espero que ajude.

    []'s,
    Fabio I.
    • Editado Fabio I segunda-feira, 11 de outubro de 2021 14:07
    • Marcado como Resposta 'Natan Silva segunda-feira, 11 de outubro de 2021 16:46
    segunda-feira, 11 de outubro de 2021 14:03

Todas as Respostas

  • Natan,

       Eu montei, mas o meu eu peguei como exemplo o Macoratti e não precisava validar vários e-mails de uma só vez.
       Porém achei na internet um que talvez possa te ajudar:

    ===============================================
    Regex para validar vários endereços de email

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

    https://www.ti-enxame.com/pt/c%23/regex-para-validar-varios-enderecos-de-email/941959009/

    ===============================================
    Regex for validating multiple E-Mail-Addresses

    (([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s*|\s*$))*

    https://stackoverflow.com/questions/9809357/regex-for-validating-multiple-e-mail-addresses

    ===============================================

       O que eu montei está aqui:

    ===============================================
    WCF - WINDOWS COMUNICATION FOUNDATION E REGEX C#

    /// <summary>
    /// Validar email
    /// </summary>
    /// <param name="email">email</param>
    /// <returns>Verdadeiro ou Falso</returns>
    /// <remarks>
    /// http://www.macoratti.net/09/09/net_wcf1.htm
    /// A regra para validar e-mails é a seguinte:
    /// http://www.pinceladasdaweb.com.br/blog/2008/01/21/8-expressoes-regulares-para-php-consideradas-uteis/
    /// </remarks>
    public bool ValidarEmail(string email)
    {
        String validaEmail = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-z]{2,4}|[0-9]{1,3})(\\]?)$";
    
        return Regex.IsMatch(email, validaEmail);
    }

    https://www.vbmania.com.br/index.php?modulo=detalhe&id=9439

    ===============================================


       Espero que ajude.

    []'s,
    Fabio I.
    • Editado Fabio I segunda-feira, 11 de outubro de 2021 14:07
    • Marcado como Resposta 'Natan Silva segunda-feira, 11 de outubro de 2021 16:46
    segunda-feira, 11 de outubro de 2021 14:03
  • Ajudou demais parceiro!

    Abração!!


    Natan

    segunda-feira, 11 de outubro de 2021 16:47