在写程序时经常需要判断用户输入的IP地址的有效性,以及掩码的有效性,今天我写了一个简单的类实现这两个功能。
#ifndef NETPARAMETERACK_H
#define NETPARAMETERACK_H
#include <QString>
#include <QStringList>
/*
* 网络参数有效性检查
*/
class NetParameterAck
{
public:
NetParameterAck();
/*
* static bool isIPv4(QString ip)
*
* 静态函数,检查IPv4的IP地址的字符串有效性
*
* 参数输入字符串型点分十进制的IP地址,如果有效返回true
* 否则返回false。
*/
static bool isIPv4(QString ip){
QStringList list = ip.split('.');
if(list.size() != 4)
return false;
for(int i = 0; i < 4; i++){
QString temp = list.at(i);
if(i == 0){
if(!(temp.toInt() > 0 &&
temp.toInt() < 256 &&
temp.at(0) != '0'))
return false;
}
else {
if(!(temp.toInt() >= 0 &&
temp.toInt() < 256 &&
temp.size() > 0))
return false;
else {
int num = temp.toInt();
int j = 0;
while (num > 0) {
j++;
num = num/10;
}
if(!(temp.size() == j ||
(temp.size() == 1 &&
j == 0)))
return false;
}
}
}
return true;
}
/*
* static bool isMask(QString mask)
*
* 静态函数,判断IPv4的点分十进制的掩码的有效性,将掩码
* 转化为二进制的字符串,判断是否有01组合。如果有则返回
* false,否则返回true。
*/
static bool isMask(QString mask){
QStringList list = mask.split('.');
if(list.size() != 4)
return false;
QString str;
for(int i = 0; i < 4; i++)
{
str += QString("%1").arg(list.at(i).toInt(),8,2,QLatin1Char('0'));
}
if(str.indexOf("01") > 0)
return false;
return true;
}
};
#endif // NETPARAMETERACK_H