cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验

cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验,第1张

概述/************************************************************************//* 密码校验 *//* C++11下没有问题,但是C语言是有问题的
/************************************************************************//*                           密码校验                                    *//*                   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(&reg,regular.c_str(),REG_EXTENDED | REG_NEWliNE);    retval = regexec(&reg,src.c_str(),NulL,0);    cclOG("%s is %s\n",retval == 0 ? "legal" : "illegal");    if (retval == 0) {		regfree(&reg);		return true;    }	else	{		return false;	}#endif}


难受了我三天,正则表达式在不同的语言下差别还是有很多,特别是对需要转义的字符。

终于搞定了,C++11下的正则表达式是OK,正常转义。
C语言下的正则表达式转义是不行的,必须要按照规范书写,“-”在最后,“]”在最前,[需要转义。

参考文档:

regex——正则表达式中使用方括号 POSIX正则表达式 - loverszhaokai 总结

以上是内存溢出为你收集整理的cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验全部内容,希望文章能够帮你解决cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存