C++ Qt RegExp验证程序C++;
我想创建一个验证用户输入的程序。我发现一个正则表达式可以验证输入是否正确。问题是程序允许用户输入不属于正确输入的额外字符。例如,正确的输入是23km,它允许用户放置23rt之类的东西,这正是我想要消除的。这是我的密码:C++ Qt RegExp验证程序C++;,c++,regex,qt,qvalidator,C++,Regex,Qt,Qvalidator,我想创建一个验证用户输入的程序。我发现一个正则表达式可以验证输入是否正确。问题是程序允许用户输入不属于正确输入的额外字符。例如,正确的输入是23km,它允许用户放置23rt之类的东西,这正是我想要消除的。这是我的密码: QRegExp r1("\\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm) x \\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm)");
QRegExp r1("\\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm) x \\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm)");
if(input.isEmpty()) return QValidator::Intermediate;
if(r1.exactMatch(input)) return QValidator::Acceptable; else
return QValidator::Intermediate;
我尝试了返回QValidator::Invalid代码>结束时,它根本不接受输入
我想以以下形式制作一些东西:(23km 3m X 1km 4m)。我认为您可能在获取传递给此函数的输入字符串时出错。std::cin在空格处自动断开,请确保您使用的是std::getline。
下面的代码似乎适合我
#include <QtCore/QRegularExpression>
#include <QtCore/QString>
#include <string>
#include <QtGui/QValidator>
#include <iostream>
QValidator::State test(QString input)
{
QRegularExpression r1("\\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm) x \\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm)");
//QRegExp r1(".*\\d{1,}(km|hm|dam|m|dm|сm) \\d{1,2}(km|hm|dam|m|dm|сm).*");
//QRegularExpression r1("test test");
if(input.isEmpty()) return QValidator::Intermediate;
if(r1.match(input).hasMatch()) return QValidator::Acceptable;
else return QValidator::Invalid;
}
int main()
{
std::string input;
for (int i = 0; i < 100; i++)
{
std::getline(std::cin, input);
QString test_str = QString::fromStdString(input);
QValidator::State res = test(test_str);
std::cout<<res<<std::endl;
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
QValidator::状态测试(QString输入)
{
QRegularExpression r1(\\d{1,}(km | hm | dam | m | dm | cm)\\d{1,2}(km | hm | dam | m | dm | cm)x{1,}(km | hm | dam | dm | cm){1,2}(km | hm;
//QRegExp r1(“.*\\d{1,}(km | hm | dam | m | dm | cm)\\\d{1,2}(km | hm | dam | m | cm)。*”;
//QRegularExpression r1(“测试”);
if(input.isEmpty())返回QValidator::Intermediate;
if(r1.match(input.hasMatch())返回QValidator::Acceptable;
否则返回QValidator::无效;
}
int main()
{
std::字符串输入;
对于(int i=0;i<100;i++)
{
std::getline(std::cin,输入);
QString test_str=QString::fromStdString(输入);
QValidator::State res=test(test_str);
标准::cout