Okay, also ich versuche ein Programm zu machen, mit dem Benutzer ihre E-Mails eingeben können. Ihre E-Mail wird als gültig angesehen, wenn zwei Bedingungen erfüllt sind: A. Es muss irgendwo ein "@" Zeichen stehen und B. Es muss eine Zeit nach dem "@" sein. Ich habe den Code größtenteils verloren, aber ich habe einige Schwierigkeiten, wenn es darum geht, E-Mails zu validieren, die vor dem Zeichen "@" stehen. Wenn sie die Zeit vor dem "@" Zeichen haben, gelten sie als gültig, aber sie sollten nicht sein. Beispielsweise wird die Eingabe [email protected]
als gültig angesehen.Email-Validierung in C++
Kann mir jemand helfen herauszufinden, was ich falsch gemacht habe? Vielen Dank im Voraus!
#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;
}
A 25 Zeichenpuffer für eine E-Mail-Adresse? Ich bin mir nicht sicher, ob ich weinen sollte, weil das lächerlich kurz ist. Ihr Programm wird den Schnellzug zu undefiniertem Verhalten führen, sobald jemand die Kühnheit hat, eine Adresse länger einzugeben. "oblivion @ eternaloblivion.com" ist eine bescheidene Adresse, die um 4 Zeichen für Ihren Code zu lang ist. Aus diesem Grund sind C-Style-Puffer fester Länge wirklich schlechte Nachrichten. – tadman
Der Titel könnte irreführend sein, da dies mehr "Validierung einer Teilmenge von E-Mails" ist, ist die E-Mail-Validierung [überraschend komplex] (http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html) . – user657267
Einige E-Mail-Adressen enthalten möglicherweise keinen Punkt in der Domäne. Siehe RFC2822 für Details. Die Validierung der E-Mail-Adresse ist ein Tar-Baby. – jbruni