我可以将解析后的数字作为规则的一部分进行测试。 int_< = 120

时间:2016-09-14 21:28:21

标签: boost-spirit boost-spirit-qi

我对spirit :: qi 2.5.2很新,我不确定我是否可以将解析后的值作为规则的一部分进行测试。

我见过这个;

bool c = true; // a flag
test_parser("1234", eps(phx::ref(c) == true) >> int_);
test_phrase_parser("1 2 3 4",
  *(eps(phx::ref(c) == true) >> int_[phx::ref(c) = (_1 == 4)]));

和这个Parse time_period expression with Boost::Spirit但该解析器除了50:90:90之外作为有效时间;

我想先解析数字,然后确保它是< =值。

void TestRule()
{
  using boost::phoenix::ref;
  using qi::_1;
  using qi::_val;
  using qi::eps;

  qi::uint_parser<unsigned int, 10, 2, 2> uint2_p;

  std::wstring mTime = L"50:90:90";  // This should fail as it isn't a valid time

  auto f = mTime.begin(), l = mTime.end();

  bool validTime = qi::parse(f, l, uint2_p[_val = _1] >> eps(_val <= 24) >> ":" >> uint2_p >> ":" >> uint2_p);
}

以上代码失败。

我可以这样做还是需要使用功能?

谢谢。

1 个答案:

答案 0 :(得分:1)

这样可以正确验证23:59:59之类的输入,并且无法输入24:00:00。

bool validTime = qi::parse(f, l, uint2_p[ _pass = _1<24] >> ":" >> uint2_p[ _pass = _1<60] >> ":" >> uint2_p[ _pass = _1<60]);

感谢您抽出宝贵时间来查看我的问题。