joyjhonson Ответов: 1

Проверьте текстовое поле , не вводите специальные символы


Hi,

I need to put validation on textbox. I want to allow only numbers ( 0-9) and alphabets  ( a to z or A to Z). All special charcters shall be ignored including space.

I am using standared CEDIT control and in resource file I have defined control of type CEDIT
 
EDITTEXT        INPUTEDITCONTROL,40,40,134,10,ES_AUTOHSCROLL

Please let me know what could be best way to do this?


Что я уже пробовал:

Еще не пробовал...Я думал попробовать проверить значения ASCII. я думаю, что должен быть другой хороший способ сделать это

1 Ответов

Рейтинг:
2

Jochen Arndt

Это зависит от того, когда вы хотите выполнить проверку:
Во время набора текста или когда значение должно быть извлечено.

При извлечении значения
Получите строку из текстового поля и напишите функцию проверки.

Такая функция может использовать регулярные выражения или проверять каждый символ. В вашем случае проверка каждого символа с помощью isalnum, iswalnum, _isalnum_l, _iswalnum_l[^] или std::isalnum может быть, это более простой вариант:

#include <locale>  

bool IsAlNum(LPCTSTR lpszValue)
{
    // C locale to match only a-z and A-Z
    std::locale loc("C");
    size_t len = _tcslen(lpszValue);
    for (size_t i = 0; i < len; i++)
    {
        if (!std::isalnum(lpszValue[i], loc))
            return false;
    }
    return true;
}

Во время набора текста
Выведите класс из CEdit и переписать OnChar метод:
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // Or use isalnum() too
    if ((nChar >= '0' && nChar <= '9') ||
        (nChar >= 'A' && nChar <= 'Z') ||
        (nChar >= 'a' && nChar <= 'z'))
    {
        CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
}