Qt ip地址与子网掩码合法性校验

来源:互联网 发布:linux各个目录的作用 编辑:程序博客网 时间:2024/06/06 09:59


1、ip 地址合法性校验


    static bool checkIp(QString ip)    {        QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");         if( !rx2.exactMatch(ip) )         {               return false;         } else {             QStringList pieces = ip.split(".");             int b_subIpNum[4];             int b_cnt255 = 0;             bool ok = true;             for (int i = 0;i < 4;i++) {                 b_subIpNum[i] = pieces.value(i).toInt(&ok,10);//合理性判断                 if(!ok) {                     return false;                 }                 if (b_subIpNum[i] > 255) {                     return false;                 }                 if (b_subIpNum[i] == 255) {                     b_cnt255 += 1;                 }             }             if (b_subIpNum[0] == 0 || b_cnt255 == 4){                 b_cnt255 = 0;                 return false;             }         }         return true;    }


    static bool checkip(QString ip)    {        QRegExp rx2("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$");         if( !rx2.exactMatch(ip) )         {               return false;         }         return true;    }



2、子网掩码合法性校验


    static bool checkMask(QString mask)    {        QRegExp rx2("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");         if( !rx2.exactMatch(mask) )         {               return false;         } else {             QStringList pieces = mask.split(".");             int b_subMaskNum[4];             int b_cnt255 = 0;             int b_cnt0 = 0;             bool ok = true;             int imask = 0;             int tmask = 255;             for (int i = 0;i < 4;i++) {                 b_subMaskNum[i] = pieces.value(i).toInt(&ok,10);//合理性判断                 if(!ok) {                     return false;                 }                 imask =  b_subMaskNum[i];                 if(!(imask==128 || imask==192 || imask==224 || imask==240 || imask==248 || imask==252 || imask==254 || imask==255 || imask==0)) {                     return false;                 } else if (imask > tmask) {                     return false;                 }                 if (b_subMaskNum[i] == 0) {                     b_cnt0 += 1;                 }                 if (b_subMaskNum[i] == 255) {                     b_cnt255 += 1;                 }                 tmask = imask;             }             if((b_cnt255 + b_cnt0) < 3) {                 return false;             }             if (b_subMaskNum[0] == 0 || b_cnt255 == 4){                 b_cnt255 = 0;                 return false;             }         }         return true;    }


    static bool checkMask(QString mask)    {        QRegExp rx2("^(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)$");         if( !rx2.exactMatch(mask) )         {               return false;         }         return true;     }





1 0