使用正则表达式进行电子邮件输入验证C ++

时间:2019-07-05 17:30:05

标签: c++

对于一个项目,我正在尝试使用正则表达式验证我的用户输入电子邮件,但它似乎接受我输入的任何内容。我知道我可能对C ++感到陌生。对不起大家!希望能为您提供帮助。

User.cpp文件

#include "pch.h"
#include "User.h"

//Email regex
std::string userEmailRegex = "[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a- 
z0-9-]+)*(.[a-z]{2,4})";

//Validates data against a user-defined string
bool validate(std::string regexStr, std::string data)
{
return std::regex_match(data, std::regex(regexStr));
}

User::User()
{
}

User::User(std::string email, std::string password, std::string username)
{
setEmail(email);
setPassword(password);
setUsername(username);
}

User::~User()
{
}

void User::setEmail(std::string email)
{
bool bValid = validate(userEmailRegex, email);
if (bValid)
{
    this->email = email;
}
else
{
    this->email = "default@default.com";
}
}

Main.cpp文件

#include "pch.h"
#include "User.h"

User u;

int main()
{
std::vector<User> v;

std::string email = u.getEmail();
std::cout << "Email: ";
std::cin >> email;

}

1 个答案:

答案 0 :(得分:0)

对于您的正则表达式,您忘了转义.,否则表示任何字符(\n除外)。

R"([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))"

但这不是验证电子邮件的正确方法,请参见can-it-cause-harm-to-validate-email-addresses-with-a-regex