cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2353字,纯文字阅读大概需要4分钟。
内容图文
/************************************************************************/ /* 密码校验 */ /* 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, StringUtil::format256("^[a-zA-Z0-9~!@#$%^&*()_+`\\-={}\\[\\]:\";'<>?,.\\/]{%d,%d}$", lengthMin, lengMax)); #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID||CC_TARGET_PLATFORM == CC_PLATFORM_IOS) return StringUtil::StringVerification(strPassword, StringUtil::format256("^[]a-zA-Z0-9~!@#$%^&*()_+`={}:;'<>?,./\"\[-]{%d,%d}$", lengthMin, 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(), 0, NULL, 0); CCLOG("%s is %s\n", regular.c_str(), retval == 0 ? "legal" : "illegal"); if (retval == 0) { regfree(®); return true; } else { return false; } #endif }
终于搞定了,C++11下的正则表达式是OK,正常转义。
C语言下的正则表达式转义是不行的,必须要按照规范书写,“-”在最后,“]”在最前,[需要转义。
参考文档:
regex——正则表达式中使用方括号
原文:http://blog.csdn.net/hanbingfengying/article/details/42613515
内容总结
以上是互联网集市为您收集整理的cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验全部内容,希望文章能够帮你解决cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。