Cocos2dx-CCEditBox输入框中英文检测

来源:互联网 发布:数据库技术发展 编辑:程序博客网 时间:2024/05/22 21:17

用法如下:

1.类继承public cocos2d::extension::CCEditBoxDelegate,并实现CCEditBox需要实现的代理

virtual void editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox);

virtual void editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox);

virtual void editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text);

virtual void editBoxReturn(cocos2d::extension::CCEditBox* editBox);


2.定义输入框

cocos2d::extension::CCEditBox*  mEditName;

mEditName =SUIMgr.createCEditBox("EditAccount",this,400,400,250,60);

mEditName->setPosition(middleParentNode->getPosition());

mEditName->setPlaceholderFontColor(ccc3(255,255,255));

mEditName->setText("请输入名字");

mEditName->setMaxLength(10);

this->addChild(mEditName);


3.输入回调函数实现

void editBoxEditingDidBegin(cocos2d::extension::CCEditBox* editBox)

{

   mEditName->setText("");

   mStrName ="";    

}

void editBoxEditingDidEnd(cocos2d::extension::CCEditBox* editBox){    

}

void  editBoxTextChanged(cocos2d::extension::CCEditBox* editBox, const std::string& text){

   mStrName = text;    

}

void  editBoxReturn(cocos2d::extension::CCEditBox* editBox){    

}


4.检测函数(输入完成后调用,或向服务器请求时候调用,自检)

void checkNameNomative(conststring& text)

{

   if (text =="") {

       CCMessageBox("名字不能为空","account error!");

       return;

    }

   //在苹果环境下需转为宽字符,因一个string中文长度为3,宽字符为1

   std::wstring name_wstring =Utils::s2ws(text);

   int chiniseSize =0;

   int engnishSize =0;

   for (int i =0; i != name_wstring.length(); i++) {

       // 判断是否为英文字母

       if (((name_wstring[i] >=48) && (name_wstring[i]<=57)) || ((name_wstring[i] >=65) && (name_wstring[i] <=90)) || ((name_wstring[i] >=97) && (name_wstring[i] <=122))) {

            engnishSize ++;

        }

       //是否为汉字

       if (name_wstring[i] >127) {

            chiniseSize++;

        }

    }


   // 全部为汉字1~6

   if (((chiniseSize >0) && (chiniseSize <7)) && (engnishSize ==0)) {

       CCLOG("全部汉字:%d",chiniseSize);

    }

   // 全部英文2~10

   elseif (((engnishSize >1) && (engnishSize <11)) && (chiniseSize == 0)){

       CCLOG("全部英文:%d",engnishSize);

    }

   // 汉字加英文1~6

   elseif (((chiniseSize >0) && (chiniseSize <7)) && ((engnishSize > 0) && (engnishSize <11)) && (chiniseSize + engnishSize <7)) {

       CCLOG("汉字加英文:%d + %d",chiniseSize, engnishSize);

    }

   // 长度错误

   else {

       CCLOG("长度错误!%d + %d",chiniseSize, engnishSize);

    }

}

// string 转宽字符函数 注:utf8是一开源文件,其中有包含检测的代码。用时需导入相关几个文件

std::wstringUtils::s2ws(conststd::string& s)

{

    

   std::wstring resultstring;

    resultstring.reserve(s.length());

   utf8::utf8to16(s.begin(), s.end(),std::back_inserter(resultstring));

    

   return resultstring;

}


最后,cceditbox未做中英文区分,需自己写检测方法,用此方法可实现检测以及达到中英文输入自量的不同。


来自:http://blog.csdn.net/u010619611/article/details/36391455
0 0
原创粉丝点击