C++ Qt RegExp验证程序C++;

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

我想创建一个验证用户输入的程序。我发现一个正则表达式可以验证输入是否正确。问题是程序允许用户输入不属于正确输入的额外字符。例如,正确的输入是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;

我尝试了
返回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