Android Java判断密码强度方法实例(强度显示)
作者:才疏学浅,努力修炼
1,正则表达式
密码强度的正则表达式
public static final String WEAK_PATTERN = "(^(?=.*[0-9])(?=.*[a-z])[0-9a-z]{6,18}$)|(^(?=.*[0-9])(?=.*[A-Z])[0-9A-Z]{6,18}$)";//全数字+字母(大/小) public static final String MEDIUM_PATTERN = "((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,18})|((?=.*[0-9])(?=.*[a-z])(?=.*[^\\w\\s]).{6,18})|((?=.*[0-9])(?=.*[A-Z])(?=.*[^\\w\\s]).{6,18})";//数字+字母(大+小)/数字+小+特殊字符/数字+大+特殊字符 public static final String STRONG_PATTERN = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^\\w\\s]).{6,18}";//数字+字母(大+小)+特殊字符
我们定义密码至少有数字和字母,且最少6位最多18位,按照密码强弱层度分成了弱中强三种情况。
弱:是数字+字母(大/小),此时的字母要么全是大写,要么全是小写
中:数字+字母(大+小)/数字+小+特殊字符/数字+大+特殊字符,情况比较多分为三种情况 :
- 数字+字母(大写+小写):此时字母大小写同时存在
- 数字+小+特殊字符:数字+小写字母+特殊字符(比如@、¥、*等)的组合
- 数字+大+特殊字符:数字+大写字母+特殊字符的组合
强:数字+字母(大+小)+特殊字符,数字+字母大小写同时存在+特殊字符,最强密码
解析正则表达式
WEAK_PATTERN
( // 开始第一个正则表达式组 ^ // 匹配字符串的开始位置 (?=.*[0-9]) // 正向先行断言,匹配至少一个数字 (?=.*[a-z]) // 正向先行断言,匹配至少一个小写字母 [0-9a-z]{6,18} // 匹配6-18个数字或小写字母的组合 $ // 匹配字符串的结束位置 ) // 结束第一个正则表达式组 | // 或 ( // 开始第二个正则表达式组 ^ // 匹配字符串的开始位置 (?=.*[0-9]) // 正向先行断言,匹配至少一个数字 (?=.*[A-Z]) // 正向先行断言,匹配至少一个大写字母 [0-9A-Z]{6,18} // 匹配6-18个数字或大写字母的组合 $ // 匹配字符串的结束位置 ) // 结束第二个正则表达式组
该正则表达式包含两个正则表达式组,用 |
进行分隔,表示匹配两种不同的密码格式,分别为:
- 至少包含一个数字和一个小写字母的6-18位密码;
- 至少包含一个数字和一个大写字母的6-18位密码。
每个正则表达式组都使用了正向先行断言,确保密码中至少包含指定的字符类型。然后使用字符集 [0-9a-z]
或 [0-9A-Z]
来匹配密码中的数字和字母。最后使用 {6,18}
来限制密码长度在6-18个字符之间,并使用 ^
和 $
分别表示匹配字符串的开始和结束位置。
MEDIUM_PATTERN
( // 开始第一个正则表达式组 (?=.*[0-9]) // 正向先行断言,匹配至少一个数字 (?=.*[a-z]) // 正向先行断言,匹配至少一个小写字母 (?=.*[A-Z]) // 正向先行断言,匹配至少一个大写字母 .{6,18} // 匹配6-18个任意字符 ) // 结束第一个正则表达式组 | // 或 ( // 开始第二个正则表达式组 (?=.*[0-9]) // 正向先行断言,匹配至少一个数字 (?=.*[a-z]) // 正向先行断言,匹配至少一个小写字母 (?=.*[^\w\s]) // 正向先行断言,匹配至少一个非单词字符和非空白字符 .{6,18} // 匹配6-18个任意字符 ) // 结束第二个正则表达式组 | // 或 ( // 开始第三个正则表达式组 (?=.*[0-9]) // 正向先行断言,匹配至少一个数字 (?=.*[A-Z]) // 正向先行断言,匹配至少一个大写字母 (?=.*[^\w\s]) // 正向先行断言,匹配至少一个非单词字符和非空白字符 .{6,18} // 匹配6-18个任意字符 ) // 结束第三个正则表达式组
该正则表达式包含三个正则表达式组,用 |
进行分隔,表示匹配三种不同的密码格式,分别为:
- 包含数字、小写字母和大写字母的6-18位密码;
- 包含数字、小写字母和非单词字符和非空白字符的6-18位密码;
- 包含数字、大写字母和非单词字符和非空白字符的6-18位密码。
每个正则表达式组都使用了三个正向先行断言,确保密码中至少包含指定的字符类型。(?=.[0-9])
表示密码中至少包含一个数字,(?=.[a-z])
表示密码中至少包含一个小写字母,(?=.[A-Z])
表示密码中至少包含一个大写字母,(?=.[^\w\s])
表示密码中至少包含一个非单词字符和非空白字符。
最后使用 .{6,18}
来匹配密码中的任意字符,并限制密码长度在6-18个字符之间。
STRONG_PATTERN
( // 开始正则表达式组 ?=.*[0-9] // 正向先行断言,匹配至少一个数字 (?=.*[a-z]) // 正向先行断言,匹配至少一个小写字母 (?=.*[A-Z]) // 正向先行断言,匹配至少一个大写字母 (?=.*[^\w\s]) // 正向先行断言,匹配至少一个非单词字符和非空白字符 .{6,18} // 匹配6-18个任意字符 ) // 结束正则表达式组
该正则表达式用于匹配包含数字、小写字母、大写字母和非单词字符和非空白字符的6-18位密码。
该正则表达式使用正向先行断言,确保密码中至少包含指定的字符类型。?=.*[0-9]
表示密码中至少包含一个数字,?=.*[a-z]
表示密码中至少包含一个小写字母,?=.*[A-Z]
表示密码中至少包含一个大写字母,?=.*[^\w\s]
表示密码中至少包含一个非单词字符和非空白字符。
最后使用 .{6,18}
来匹配密码中的任意字符,并限制密码长度在6-18个字符之间。
2,使用方法
public static String checkStrength(String password) { if (Pattern.matches(STRONG_PATTERN, password)) { return "strong"; }else if (Pattern.matches(MEDIUM_PATTERN, password)) { return "medium"; } else if (Pattern.matches(WEAK_PATTERN, password)) { return "weak"; }else { return "invalid"; } } public static void main(String[] args) { while(true){ Scanner scan = new Scanner(System.in); String password = scan.next(); String strength = checkStrength(password); System.out.println("Password strength: " + strength); } }
测试结果
3,项目中使用效果
总结
到此这篇关于Android Java判断密码强度(强度显示)的文章就介绍到这了,更多相关Android Java判断密码强度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!