强密码类型检测【大小写字母+数字+特殊字符,缺一不可】
针对于软件项目安全性检测中的APP密码安全等级鉴定需求,需要强密码类型的检测代码编写策略。
正则:
public static String pwdReg = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,16}$";
对于上述正则表达式,发现特殊字符的检测中,下划线 _ 被漏掉了,且允许输入空格,也就是:
不通过,目前为止还不知道怎么优化这条正则,希望对正则有理解的朋友帮忙修改一下。看了网上绝大多数正则,都无法满足我的需求(标题所写),目前解决策略如下:
/**密码类型检测 * @return boolean 是否通过强密码规则 */ public boolean check() { //特殊字符枚举 String regEx = "[ _`[email protected]#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(pwdStr); boolean specialStrFlag = matcher.find(); //必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间 boolean numStrFlag = pwdStr.matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"); if (specialStrFlag && numStrFlag) { return true; } else { return false; } }
不想花太多时间在这,故通过枚举的方式实现与避免。