在寫程序時經常需要判斷用戶輸入的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