强密码类型检测【大小写字母+数字+特殊字符,缺一不可】

针对于软件项目安全性检测中的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 = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\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;
    }
}

不想花太多时间在这,故通过枚举的方式实现与避免。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值