我需要验证字符串。字符串的格式如“V02:01:02:03:04”
我想做什么:
1)我想检查提供的正确长度
2)第一个字符是'V'
3)所有其他字符均为2个字母数字,并用冒号和正确位置分隔
4)没有空格标签et.c
4)不能再考虑验证了。
到目前为止我做了什么
1)函数很容易检查len和拳头char不验证后面的字符首先不包含alpha或空格。但是我对每个冒号后检查结肠位置和2个字母的问题感到有些困惑。
以下是我的尝试。
int firmwareVerLen = 15;
const std::string input = "V02:01:02:03:04"; // this is the format string user will input with changes only in digits.
bool validateInput( const std::string& input )
{
typedef std::string::size_type stringSize;
bool result = true ;
if( firmwareVerLen != (int)input.size() )
{
std::cout <<" len failed" << std::endl;
result = false ;
}
if( true == result )
{
if( input.find_first_of('V', 0 ) )
{
std::cout <<" The First Character is not 'V' " << std::endl;
result = false ;
}
}
if( true == result )
{
for( stringSize i = 1 ; i!= input.size(); ++ i )
{
if( isspace( input[i] ) )
{
result = false;
break;
}
if( isalpha(input[i] ) )
{
cout<<" alpha found ";
result = false;
break;
}
//how to check further that characters are digits and are correctly separated by colon
}
}
return result;
}
答案 0 :(得分:2)
如果是如此严格的验证,为什么不逐个字符地检查?例如(鉴于你已经完成了尺寸)
if (input[0] != 'V')
return false;
if (!std::isdigit(input[1]) || !std::isdigit(input[2]))
return false;
if (input[3] != ':')
return false;
// etc...
答案 1 :(得分:0)
从第一个数字开始,所有字符必须是数字,除非模数3的位置为0,否则它必须是冒号。
HTH Torsten
答案 2 :(得分:0)
对于这么短的短输入和严格的格式,我可能会做这样的事情:
bool validateInput( const std::string& input )
{
static const size_t digit_indices[10] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 14};
static const size_t colon_indices[4] = {3, 6, 9, 12};
static const size_t firmwareVerLen = 15;
static const size_t n_digits = sizeof(digit_indices) / sizeof(size_t);
static const size_t n_colons = sizeof(colon_indices) / sizeof(size_t);
if (input.size() != firmwareVerLen) return false; // check 1)
if (input[0] != 'V') return false; // check 2)
for (size_t i = 0; i < n_digits; ++i) // check 3)
if (!is_digit(input[digit_indices[i]]) return false;
for (size_t i = 0; i < n_colons; ++i) // check 3)
if (input[colon_indices[i]] != ':') return false;
// check 4) isn't needed
return true;
}
如果输入格式发生变化,相当容易保持,IMO。