字符输入验证函数

背景:
查找输入的字符串是否符合要求,通常用于限制用户在编辑框(如 CEdit)中只能输入特定格式的数据,例如数字、小数、时间格式等
主要变量说明:
**m_nDecialNum:**一个成员变量,表示允许的小数点后数字的位数(如设为2,则小数最多有两位小数)。
**m_bMinus:**一个成员变量,表示是否允许输入负号(负数)。
**GetSel(nStart, nEnd):**获取当前选中的文本范围。
**GetWindowText(strContent):**获取当前编辑框的内容。

bool IsValidChar(UINT nChar)
{
    bool bValid = true; // 假设输入字符有效

    // 检查输入字符是否为数字、小数点、冒号,或者特殊按键(左箭头、退格、右箭头、删除键)
    if ((nChar >= _T('0') && nChar <= _T('9')) || nChar == _T('.') || nChar == _T(':') || nChar == VK_LEFT || nChar == VK_BACK || nChar == VK_RIGHT || nChar == VK_DELETE)
    {
        // 如果输入字符是小数点且当前小数点个数为0,则不允许输入小数点,即只能输入数字
        if (nChar == _T('.') && m_nDecialNum == 0)
        {
            return false;
        }

        int nStart = 0, nEnd = 0;
        GetSel(nStart, nEnd); // 获取当前选中文本的起始和结束位置
        CString strContent;
        GetWindowText(strContent); // 获取当前控件文本内容

        // 如果有文本被选中,则清空文本
        if ((nEnd - nStart) != 0)
        {
            strContent = _T("");
        }

        // 查找小数点的位置
        int DecimalPoint = strContent.Find(_T('.'));
        if (DecimalPoint != -1) // 如果找到了小数点
        {
            if (nChar == _T('.')) // 如果输入字符是小数点,则无效
            {
                bValid = false;
            }
            else
            {
                // 获取小数点后的数字部分
                CString strDecimal = strContent.Right(strContent.GetLength() - DecimalPoint - 1);
                // 如果小数部分的长度已经达到了设置的小数位数限制,则除了特殊按键外的输入字符均无效
                if (strDecimal.GetLength() >= m_nDecialNum)
                {
                    if (!(nChar == VK_LEFT || nChar == VK_RIGHT || nChar == VK_BACK || nChar == VK_DELETE))
                    {
                        bValid = false;
                    }
                }
            }
        }
        // 如果没有找到小数点,则继续处理
        else
        {
            // 这里可以添加一些额外的逻辑
        }
    }
    else // 如果输入字符不是数字、小数点、冒号或特殊按键
    {
        CString strContent;
        GetWindowText(strContent); // 获取当前控件文本内容
        // 如果允许输入负号,并且输入字符是负号,并且当前文本中不包含负号,则认为输入有效
        if (m_bMinus && (nChar == _T('-')) && (-1 == strContent.Find(_T("-"))))
        {
            bValid = true;
        }
        else // 否则,输入无效
        {
            bValid = false;
        }
    }
    return bValid; // 返回输入字符是否有效的结果
}

你可能感兴趣的:(C++,c++,visual,studio,mfc)