私はユーザーが自分の電子メールを入力できるようにするプログラムを作ろうとしています。彼らの電子メールは、2つの条件が満たされている場合に有効と見なされます。A.そこには「@」記号があり、Bには「@」の後にピリオドが必要です。私は大部分のコードをダウンしましたが、 "@"記号の前にあるピリオドを持つ電子メールの検証にはいくつかの問題があります。 「@」記号の前にピリオドがある場合は有効とみなされますが、そうではありません。たとえば、[email protected]
と入力すると有効と見なされます。C++で電子メールの検証
誰かが私が間違っていたことを理解するのを助けることができますか?前もって感謝します!
#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文字バッファ?私は泣かなければならないかどうか分からない。あなたのプログラムは、誰かがそれより長いアドレスを入力するような大胆さを持つとすぐに、急な列車を未定義の行動に乗ります。 'oblivion @ eternaloblivion.com'はあなたのコードには長すぎる長さの短いアドレスです。これが、固定長のCスタイルバッファが本当に悪いニュースである理由です。 – tadman
これは「電子メールのサブセットの検証」であり、電子メールの検証は[驚くほど複雑です](http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html)という誤解を招く可能性があります。 。 – user657267
一部の電子メールアドレスにはドメイン内にドットが含まれていない場合があります。詳細はRFC2822を参照してください。電子メールアドレスの検証はタールベビーです。 – jbruni