C ++ MFC RegEx выпуск

0

Я использую Regex для ограничения некоторых символов, введенных в текстовое поле

Я использую ниже для разрешенных символов

CAtlRegExp<> regex;
CString csText2 = "Some Test £"
CString m_szRegex = "([a-zA-Z0-9\\.\\,\";\\:'@#$£?\\+\\*\\-\\/\\%! ()])";
REParseError status = regex.Parse(m_szRegex, true);

CAtlREMatchContext<> mc;
if (!regex.Match(csText2, &mc)) 
{
     AfxMessageBox("Inavlid Char")
}       

Это прекрасно работает, за исключением символа £. Кажется, это не подбирает

Может ли кто-нибудь посоветовать то, что мне не хватает

благодаря

Теги:
mfc

1 ответ

0
Лучший ответ

Кажется, это ошибка, которая затрагивает все расширенные символы ASCII (те, что выше 0x7F).

Значение символа преобразуется в целое и используется как индекс в какой-то массив атрибутов. Поскольку char подписан, он претерпевает расширение знака, поэтому любой символ выше 0x7F вызовет переполнение.

size_t u = static_cast<size_t>(static_cast<_TUCHAR>(* ((RECHAR *) sz)));
if (pBits[u >> 3] & 1 << (u & 0x7))

Вы можете найти больше обсуждений по этой теме здесь: CAtlRegExp сбой с значком фунта!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню