NSIS中如何使用正则表达式实现含大小写、特殊字符的密码校验?
NSIS正则匹配及密码校验实现方案
核心问题解答
原生NSIS未内置正则表达式匹配能力,你可以通过第三方插件实现正则模式匹配,业内最常用的是nsRegex插件,无需自己维护多套字符校验列表,完全可以实现你需要的密码规则校验需求。
密码校验具体实现
适配需求的正则规则
针对你要求的同时包含大写字母、小写字母、特殊字符的密码规则,可使用如下正则表达式(可根据实际业务调整长度、特殊字符范围等限制):^(?=.*[A-Z])(?=.*[a-z])(?=.*[^\w\d\s])([^\s]){8,16}$
各规则段含义:
(?=.*[A-Z]):校验字符串内至少存在1个大写英文字母(?=.*[a-z]):校验字符串内至少存在1个小写英文字母(?=.*[^\w\d\s]):校验字符串内至少存在1个非字母、非数字、非空白的特殊字符([^\s]){8,16}:校验字符串长度在8-16位之间,且不包含空白字符
NSIS代码示例
使用nsRegex插件的校验代码参考如下:
nsRegex::Match "^(?=.*[A-Z])(?=.*[a-z])(?=.*[^\w\d\s])([^\s]){8,16}$" $R0 ; $R0存储待校验的密码字符串 Pop $R1 ${If} $R1 == 1 MessageBox MB_OK "密码校验通过" ${Else} MessageBox MB_OK "密码不符合规则,需同时包含大写字母、小写字母、特殊字符,长度8-16位" ${EndIf}
注:使用nsRegex插件需提前将插件dll放到NSIS安装目录的Plugins对应架构文件夹下,编译时会自动打包到安装包中。
无插件替代方案
如果你不想引入第三方插件,也可以用NSIS原生字符串操作封装独立的校验函数,分别遍历字符串判断是否存在大写、小写、特殊字符,相比你现在用的StrCSpn方案可以优化封装逻辑,减少重复代码。
内容的提问来源于stack exchange,提问作者RogerDodger
相关产品推荐
相关产品推荐

