0

我想创建一个验证用户输入的程序。我找到了一个验证输入是否正确的正则表达式。问题是该程序允许用户输入不属于正确输入的额外字符。例如,正确的输入是 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;了,它根本不需要输入。

我想制作以下形式的东西:(23km 3m X 1km 4m)。

4

1 回答 1

0

我认为您在获取传递给此函数的输入字符串时可能会出错。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;

}
于 2020-10-24T05:14:52.687 回答