如何提示用户在C ++中输入正确格式的电子邮件地址?

时间:2017-10-18 10:39:25

标签: c++

基本上,我希望限制用户使用以下代码以正确格式的电子邮件地址输入。

 cout << "Donor's Email: ";
 cin >> email;
     while (email != "@" && email != "."){
     cout << "Please enter correct email format." << endl;
     cout << "Donor's Email: ";
     cin >> email;
     }

不知何故,结果是,即使我输入正确格式的电子邮件地址,但它仍然循环让我再次输入。 有人请帮帮我。感谢。

2 个答案:

答案 0 :(得分:3)

你不想要否定你的条件:即

while (!(email != "@" && email != "."))

,通过应用De Morgan的法律简化为

while (email == "@" || email == ".")

但在我看来,这似乎是对有效性的不充分检查(例如,"@@"肯定也是无效的)。考虑使用正则表达式std::regex&amp; c。来自C ++ 11,使用Google搜索“有效电子邮件地址的正则表达式”。

答案 1 :(得分:2)

没试过,但如果您使用的是C ++ 11,则可以使用std::regex

gonjay's answer开始,您的代码可能类似于:

 #include <regex>
 using namespace std;

 const regex pattern("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");
 cout << "Donor's Email: ";
 cin >> email;
      while (!regex_match(email, pattern)){
      cout << "Please enter correct email format." << endl;
      cout << "Donor's Email: ";
      cin >> email;
      }