L'Email de validation en C++

Bon alors je suis en train de faire un programme qui permet à l'utilisateur d'entrer son e-mail. Leur e-mail sera considéré comme valable que si deux conditions sont remplies: A. il doit y avoir un signe "@" quelque part là-bas et B. il doit y avoir une période après le "@". J'ai eu le code en bas pour la plupart, mais j'ai quelques difficultés quand il s'agit de la validation des e-mails qui ont une période avant le signe"@". Si ils ont de la période avant le signe "@" ils sont considérés comme valides, mais ils ne devraient pas l'être. Par exemple, en entrant text.example@randomcom est considéré comme valide.

Quelqu'un peut-il m'aider à comprendre ce que j'ai fait de mal? Je vous remercie à l'avance!

#include <iostream>
#include <cctype>
#include <cstring>
using namespace std;

int main()
{
    int x = 25; //random size enough to hold contents of array plus one for               null terminator
    char input[x]; //array to hold input
    int sizeOf; //holds length of input array
    char* ptr = nullptr; //pointer
    char* ptr2 = nullptr; //pointer

    cout << "Enter your email address\n";
    cin.getline(input,x);
    sizeOf = strlen(input);

    for(int i = 0; i < sizeOf; i++)
    {
        ptr= strstr(input, "@"); //searches input array for "@" string
        if(ptr != nullptr) 
        {
            break;
        }
    }

    for(int i = 0; i < sizeOf; i++)
    {
        ptr2 = strstr(input, "."); //searches input array for "." string
        if(ptr2 != nullptr && &ptr2 > &ptr)
        {
            break;
        }
    }

    if(ptr != nullptr) //validates input of "@" sign
    {
        if(ptr2 != 0 && &ptr2 < &ptr) 
            {
                cout << "Email accepted.\n";
            }

        else
            {
                cout << "Missing . symbol after @\n";
            }
    }

    else
    {
        cout << "Missing @ symbol\n";
    }



return 0;
}
  • 25 tampon de caractères pour une adresse email? Je ne suis pas sûr si je devrais pleurer parce que c'est ridiculement court. Votre programme va prendre le train express pour un comportement indéterminé dès que quelqu'un a l'audace de se taper une adresse plus que cela. [email protected] est un modeste longueur de l'adresse qui est trop long par 4 caractères de votre code. C'est pourquoi fixe-longueur de C style tampons sont vraiment de mauvaises nouvelles.
  • Le titre peut être trompeur, car ce n'est plus la "validation d'un sous-ensemble de e-mails", l'email de validation est étonnamment complexe.
  • Certaines adresses ne contiennent pas d'un point dans le domaine. Voir RFC2822 pour plus de détails. Adresse Email de validation est un tar-bébé.
  • Êtes-vous limité à l'utilisation <cstring> ? Ou pouvez-vous utiliser <algorithm> et <regex>?