我想创建一个验证用户输入的程序。我找到了一个Regex,它可以验证输入是否正确。问题是该程序允许用户输入不属于正确输入的额外字符。例如,正确的输入是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)");
if(input.isEmpty()) return QValidator::Intermediate;
if(r1.exactMatch(input)) return QValidator::Acceptable; else
return QValidator::Intermediate;
最后我尝试了return QValidator::Invalid;
,它根本不接受输入。
我想做一些形式的东西:(23公里3米X 1公里4米(。
我认为您在获取传递给此函数的输入字符串时可能犯了一个错误。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;
}