Java基于正则实现2小写+8数字共10位密码校验的问题咨询
问题分析
你当前使用的正则无法匹配需求,存在以下问题:
- 仅校验了密码中至少存在1位数字、1位小写字母,没有限定两类字符的精确出现次数
- 仅要求密码长度不小于8位,没有限定总长度固定为10位
- 仅排除了空白字符,没有禁止大写字母、特殊符号等其他非法字符
修复方案
你可以使用以下正则实现需求:^(?=(?:[^a-z]*[a-z]){2}[^a-z]*$)(?=(?:\D*\d){8}\D*$)[a-z\d]{10}$
对应的Java代码修改如下:
System.out.print("Password: "); Scanner pass=new Scanner(System.in); String password=pass.next(); // 修正后的正则,Java中需要对反斜杠做转义 String password_regex="^(?=(?:[^a-z]*[a-z]){2}[^a-z]*$)(?=(?:\\D*\\d){8}\\D*$)[a-z\\d]{10}$"; boolean password_result=password.matches(password_regex); if(password_result){
正则规则说明
(?=(?:[^a-z]*[a-z]){2}[^a-z]*$):正向预查,校验整个字符串中恰好包含2个小写英文字母(?=(?:\\D*\\d){8}\\D*$):正向预查,校验整个字符串中恰好包含8个数字[a-z\\d]{10}:校验整个字符串只能由小写字母和数字组成,总长度固定为10位
内容的提问来源于stack exchange,提问作者user16376117
相关产品推荐
相关产品推荐

