MFC,如何检查 CString 格式是不是与 IP 格式匹配

Posted

技术标签:

【中文标题】MFC,如何检查 CString 格式是不是与 IP 格式匹配【英文标题】:MFC, How do I check the CString format is match the IP FormatMFC,如何检查 CString 格式是否与 IP 格式匹配 【发布时间】:2014-05-05 08:53:41 【问题描述】:

MFC,如何检查 CString 格式是否与 IP 格式匹配,

例如用户输入

192.168,1,1 错误格式

256.256.2.2 错误格式

192.168.2 错误格式

一些提示告诉我,谢谢

【问题讨论】:

如果您尝试验证用户输入的字符串,您可以改用CIPAddressCtrl 【参考方案1】:

使用Find()Mid()Tokenize() 搜索字符串并根据一些必需的规则验证其内容:

例如

    没有字母字符 正好是 3 个句点 (.) 句号之间的数字 0 第一个数字 > 0 等等……

【讨论】:

【参考方案2】:

好的,我找到了解决办法

// precisely 3 periods (.), my ip is save if strCtrlIP
    CString strCheck(strCtrlIP);
    int nPointNum = 0;

    nPointNum = strCheck.Remove('.');

    if(nPointNum != 3)
    
        AfxMessageBox(_T("IP example:192.168.0.1"));
        return;
    

    // numbers between periods, 0 <= number <= 255
    strCheck.Format(_T("%s"), strCtrlIP);
    while(strCheck.Find(_T(".")) >= 0)
    
        int nLoc = strCheck.Find(_T("."));
        int nVal = _ttoi(strCheck.Left(nLoc));
        strCheck = strCheck.Right(strCheck.GetLength() - (nLoc+1)); // egnore point

        if(nVal < nUserLimitDown || nVal > nUserLimitUp || strCheck.IsEmpty())
        
            AfxMessageBox(_T("IP example:192.168.0.1"));
            return;
        
    
    if(_ttoi(strCheck) < nUserLimitDown || _ttoi(strCheck) > nUserLimitUp)
    
        AfxMessageBox(_T("IP example:192.168.0.1"));
        return;
    

【讨论】:

以上是关于MFC,如何检查 CString 格式是不是与 IP 格式匹配的主要内容,如果未能解决你的问题,请参考以下文章

在mfc中如何判断输入的是不是为汉字?

急,如何输出格式化字符串c++/mfc

如何将 MFC CString 与 boost 字符串算法库一起使用

MFC 把CString格式的时间添加到时间控件(CDateTimeCtrl)中去

C++ MFC CString怎么转换成Double

MFC中char*,string和CString之间的转换(待补充)