字符输入验证函数
背景:
查找输入的字符串是否符合要求,通常用于限制用户在编辑框(如 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; // 返回输入字符是否有效的结果
}