Я использую 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")
}
Это прекрасно работает, за исключением символа £. Кажется, это не подбирает
Может ли кто-нибудь посоветовать то, что мне не хватает
благодаря
Кажется, это ошибка, которая затрагивает все расширенные символы ASCII (те, что выше 0x7F).
Значение символа преобразуется в целое и используется как индекс в какой-то массив атрибутов. Поскольку char подписан, он претерпевает расширение знака, поэтому любой символ выше 0x7F вызовет переполнение.
size_t u = static_cast<size_t>(static_cast<_TUCHAR>(* ((RECHAR *) sz)));
if (pBits[u >> 3] & 1 << (u & 0x7))
Вы можете найти больше обсуждений по этой теме здесь: CAtlRegExp сбой с значком фунта!