我对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);
}
以上代码失败。
我可以这样做还是需要使用功能?
谢谢。
答案 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]);
感谢您抽出宝贵时间来查看我的问题。