简体   繁体   English

如何创建一个验证 function 来根据特定输入及其定义的正则表达式验证来自用户的输入?

[英]How can I create a validate function that would validate the input from the user based on the specific input and its defined regular expression?

I am validating user input using Regular Expressions in C++, but the problem I'm facing is that the code is very repetitive.我正在使用 C++ 中的正则表达式验证用户输入,但我面临的问题是代码非常重复。 I'd like to have a function that simply takes in the variable to which the user is inputting a value and its defined RE as arguments, validating these inputs and only then allowing the user to move on to the next input.我想要一个 function,它只接受用户输入值的变量及其定义的 RE 为 arguments,验证这些输入,然后才允许用户继续下一个输入。 At the current moment I'm doing this like so:目前我正在这样做:

//input name and validate it
while(1)
{
    std::cout<<"Your Name in that program"<<std::endl;
    std::getline(std::cin, name);
    if(std::regex_match(name,name_pattern))
    {
        break;
    }
    else
    {
        std::cout<<"You have entered incorrectly, please try again"<<std::endl;
    }
}
//input student id and validate it
while(1)
{
    std::cout<<"Your student ID for that program"<<std::endl;
    std::getline(std::cin, studentID);
    if(std::regex_match(studentID,studentID_pattern))
    {
        break;
    }
    else
    {
        std::cout<<"You have entered incorrectly, please try again"<<std::endl;
    }

} }

I have a few more inputs that follow the same pattern, but I would like to avoid that.我还有一些遵循相同模式的输入,但我想避免这种情况。

I'd like to have a function that simply takes in the variable to which the user is inputting a value and its defined RE as arguments, validating these inputs and only then allowing the user to move on to the next input.我想要一个 function,它只接受用户输入值的变量及其定义的 RE 为 arguments,验证这些输入,然后才允许用户继续下一个输入。

Then write that function - you've already done 95% of the work.然后写下 function - 你已经完成了 95% 的工作。 It would probably look something like this:它可能看起来像这样:

std::string GetValidatedInput(const std::regex& validation_pattern,
                              const std::string& prompt_msg) {
    while (true) {
        std::cout << prompt_msg << '\n';

        std::string user_input;
        std::getline(std::cin, user_input);

        if (std::regex_match(user_input, validation_pattern)) {
            return user_input;
        }
        std::cout << "You have entered incorrectly, please try again\n";
    }
}

And call it for each user input you need like this:并为您需要的每个用户输入调用它,如下所示:

std::string name = GetValidatedInput(name_pattern, "Your Name in that program");
std::string studentID = GetValidatedInput(studentID_pattern, "Your student ID in that program");
// ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM