利用UTF8来限制用户注册名称字数限制

来源:互联网 发布:linux mongbd部署 编辑:程序博客网 时间:2024/04/28 23:20

开始的时候用的是windows的API,代码如下:

string strName = this->m_inputBox->getUserInputStr();
int strSize = strName.size();
//字符计数器
int countWord = 0;
//计算玩家输入名称的字数
for (int i = 0; i < strSize;i++)
{
//判断是汉字还是数字或字母
if (IsDBCSLeadByte(strName.at(i)))
{
countWord++;
i+=2;
}
countWord++;
}
//判断玩家输入名称内容长短
if (countWord < 4 || countWord > 12)
{
this->m_pNameErrLabel->setVisible(true);
this->m_pNameErrLabel->setStringByID(9736);
this->m_bIsCanSetRoleName = false;
return;
}else
{
this->m_pNameErrLabel->setVisible(false);
this->m_bIsCanSetRoleName = true;
}
}

这段代码在windows环境下运行是没有问题的,但是后来在安卓运行时发现IsDBCSLeadByte并不被识别,所以只好用了Utf_8的方法:

string strInput = this->m_inputBox->getUserInputStr();
int strSize = strInput.size();
int countWord = 0;
for (int i = 0; i < strSize;)
{
int nsize = str::
utf8_chsize(&strInput[i]);
if (nsize == 3)//汉字
{
i+=3;
countWord+=2;
}
else
{
i++;
countWord++;
}
}

在这里用到了utf8_chsize,感兴趣的同学可以好好研究一下,它的返回值根据传入的类型返回的数值是不一样的,用的时候要仔细。如果有其它更好的方法处理该类问题,欢迎大家多提宝贵想法。

0 0
原创粉丝点击