0

我正在使用正则表达式来限制输入到文本框中的一些字符

我将以下内容用于允许的字符

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")
}       

这工作正常,除了£符号。它似乎没有选择这个

谁能告诉我我错过了什么

谢谢

4

1 回答 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 crash with pound sign!

于 2013-10-07T11:21:50.567 回答