Validação de emails em C/C++

Publicado por César (última atualização em 28/02/2019)

[ Hits: 3.317 ]

Download 6952.email.tar.gz




Estudando regex para validação de datas fiquei interessado em saber como validar emails usando a mesma, então elaborei um script em C++ usando orientação a objetos, e outro em c.

Para compilar o script email.cxx basta fazer:

$ g++ -oemail email.cxx -std=c++11

Para compilar o script email.c basta fazer:

$ gcc -oemail email.c

$ ./email

Espero que o mesmo seja útil.

  



Esconder código-fonte

#include <regex>
#include <iostream>
/*!
 *
 * @begin @section terms_of_use Terms of Use
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3.0+ of the License, or (at your option) any later version.
 *
 * @end @section terms_of_use Terms of Use
 * 
 * @begin @section author Author
 * 
 * @file                   email.cxx
 * @version                0.1
 * @brief                  validação de emails em c++ usando regex.
 * @author                 Jean Zonta
 * @pseudonym              wiki.anon
 * @Copyright/modification (C) 2018 Jean Zonta.
 * 
 * @end @section author Author
 *
 */
struct email
{ 
 email(const std::string& mail): _email(mail){}
 
 virtual ~email(){ if(!_email.empty())_email.clear(); }
 
 bool isEmail()
 {
  //valida todos os dominios e servidores de emails
  //const std::regex pattern("^([a-zA-Z0-9._]+@[a-z]+([.][a-z]{2,4}){1,2})$");
  //const std::regex pattern("^(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))?(\\.(\\w+))$");
  
  //valida somente servidores @{hotmail,terra,yahoo,uol,bol} no dominio .com.br e servidor gmail no dominio .com
  const std::regex pattern("^([a-zA-Z0-9._]+@((hotmail|terra|yahoo|uol|bol)[.](com[.]br))?(gmail[.]com)?)$");
  
  return std::regex_match(_email, pattern);
 }
 
 void print()
 {
  std::cout << "\n\tEmail: "+_email+(isEmail()?" is Valid\n":" is Invalid\n");
 }
 
 private:
  std::string _email;
};

int main()
{
 std::string emails[16] = {
                           "regex_cpp@net.br","reg_ex.cpp@org.nz",
                           "reg_ex.cpp@net.org.br","regex_cpp@terra.com.br.net",
                           "regex_cpp@hotmail.com","regex_cpp@hotmail.com.br",
                           "regex_cpp@yahoo.com","regex_cpp@yahoo.com.br",  
                           "regex_cpp@gmail.com","reg_ex.cpp@gmail.com.br",    
                           "regex_cpp@uol.com","regex_cpp@uol.com.br",
                           "regex.cpp@bol.com","regex_cpp@bol.com.br",
                           "regex_email@terra.com","reGe.x_email@terra.com.br" 
                          };
 
 for(int i = 0; i < 16; i++)
  {
   email(emails[i]).print();
  }
  
 /*
 char input[30]={0};
 
 do{
    std::cout << "\n\tDigite um email: ";
    std::cin >> input;
    
    email(input).print();
    
   }while(!email(input).isEmail());
 */
 std::cout << "\n";
 
 return 0;
}

Scripts recomendados

Conversor de escalas

Lista Encadeada com Ordenação

Cadastro de aluno

Sequincia em Fibonacci no C++

Qual a idade de Jacinto?


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts