我可以测试解析的数字作为规则的一部分吗?整数_ <= 120
Can I test a parsed number as part of the rule. int_ <= 120
我是 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);
}
以上代码失败。
我可以这样做还是需要使用函数?
谢谢。
这正确地验证了像 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]);
感谢您花时间看我的问题。
我是 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);
}
以上代码失败。
我可以这样做还是需要使用函数?
谢谢。
这正确地验证了像 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]);
感谢您花时间看我的问题。