cocos2dx下C++11正则表达式和android下C语言正则表达式的使用---
发布时间:2020-12-14 20:03:42 所属栏目:百科 来源:网络整理
导读:/************************************************************************//* 密码校验 *//* C++11下没有问题,但是C语言是有问题的 *//* 错误案例:^[a-zA-Z0-9~!@#$%^*()_+`-={}[]:";'?,./]{6,20}$ 正确案例:^[]a-zA-Z0-9~!@#$%^*()_+`={}:;
/************************************************************************/ /* 密码校验 */ /* C++11下没有问题,但是C语言是有问题的 */ /* 错误案例:^[a-zA-Z0-9~!@#$%^&*()_+`-={}[]:";'<>?,./]{6,20}$ 正确案例:^[]a-zA-Z0-9~!@#$%^&*()_+`={}:;'<>?,./"[-]{6,20}$ 解答:最恶心的匹配有三个字符 []- - 如果出现在 [] 的开头或结尾,表示匹配字符 ’-’ ,例如 [^-abc] , [-abc] , [abc-] 。注意不能使用 ’’ 来转义 ] 可以出现在中括号中的第一个位置,例如 []abc] 或 [^]abc] [ 需要转义 */ bool CommonFunc::CheckPasswordLegal(std::string strPassword,int lengthMin,int lengMax) { if (lengMax == 0) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) return StringUtil::StringVerification(strPassword,StringUtil::format256("^[a-zA-Z0-9~!@#$%^&*()_+`-={}[]:";'<>?,./]+$")); #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID||CC_TARGET_PLATFORM == CC_PLATFORM_IOS) return StringUtil::StringVerification(strPassword,StringUtil::format256("^[]a-zA-Z0-9~!@#$%^&*()_+`={}:;'<>?,./"[-]+$")); #endif } else if (lengMax != 0) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) return StringUtil::StringVerification(strPassword,./]{%d,%d}$",lengthMin,lengMax)); #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID||CC_TARGET_PLATFORM == CC_PLATFORM_IOS) return StringUtil::StringVerification(strPassword,./"[-]{%d,lengMax)); #endif } return false; } bool StringUtil::StringVerification(std::string src,std::string regular) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) regex pattern(regular.c_str()); if ( !regex_match( src,pattern ) ) { return false; } return true; #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID||CC_TARGET_PLATFORM == CC_PLATFORM_IOS) regex_t reg; int retval = regcomp(®,regular.c_str(),REG_EXTENDED | REG_NEWLINE); retval = regexec(®,src.c_str(),NULL,0); CCLOG("%s is %sn",retval == 0 ? "legal" : "illegal"); if (retval == 0) { regfree(®); return true; } else { return false; } #endif }
终于搞定了,C++11下的正则表达式是OK,正常转义。 参考文档: regex——正则表达式中使用方括号POSIX正则表达式 - loverszhaokai(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |