【问题标题】: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?如何创建一个验证函数,该函数将根据特定输入及其定义的正则表达式验证来自用户的输入?
【发布时间】:2021-03-26 00:21:32
【问题描述】:

我正在使用 C++ 中的正则表达式验证用户输入,但我面临的问题是代码非常重复。我想要一个函数,它只接受用户输入值的变量及其定义的 RE 作为参数,验证这些输入,然后才允许用户继续下一个输入。目前我正在这样做:

//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;
    }

}

我还有一些遵循相同模式的输入,但我想避免这种情况。

【问题讨论】:

    标签: c++ regex c++11


    【解决方案1】:

    我想要一个函数,它只接受用户输入值的变量及其定义的 RE 作为参数,验证这些输入,然后才允许用户继续下一个输入。

    然后编写那个函数——你已经完成了 95% 的工作。它可能看起来像这样:

    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";
        }
    }
    

    并为您需要的每个用户输入调用它,如下所示:

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

    【讨论】:

    • 我很确定这个问题不仅要求签名,还要求函数的实现。
    • 我确实理解签名会是什么样子,但我真的想不出一个合适的方式来使函数干净高效。
    • 更新填补空白
    • 非常感谢,我不知道为什么我无法理解这个... :)
    猜你喜欢
    • 2013-12-12
    • 2020-07-18
    • 1970-01-01
    • 2016-02-26
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多