一、语法
二、正则实战
1、纯字母
"[a-zA-Z]{1,}$"
2、纯数字
"[0-9]{1,}$"
3、字母和数字组合
"((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$"
4、字母或数字
"[a-zA-Z0-9]+$"
5、字母、数字、下划线,都可以
"\\w+$"
6、字母、数字、特殊符号,至少匹配2种
/*** 假定设置密码时,密码规则为: 字母、数字、特殊符号,至少匹配2种* 则密码可能出现的情况有:* 1、数字+特殊符号* 2、字母+特殊符号* 3、字母+数字* 4、字母+数字+特殊符号* (组合与顺序无关)* 解决思路:* 1、遍历字符串的字符数组,查看是否包含目标特殊字符,若包含,则标记字符串* 包含特殊字符,并替换当前特殊字符为''。* 2、判断剩下的字符组成的字符串,是否匹配以下情况* - 纯字母* - 纯数字* - 字母+数字* 3、字符串匹配规则* 纯字母+包含特殊字符 ---- 匹配通过* 纯数字+包含特殊字符 ---- 匹配通过* 字母+数字+包含个数字符 ---- 匹配通过*///特殊字符public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";// 纯字母public static final String character = "[a-zA-Z]{1,}$";// 纯数字public static final String numberic = "[0-9]{1,}$";// 字母和数字public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +"|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";// 字母或数字public static final String number_or_character = "[a-zA-Z0-9]+$";// 字母数字下划线public static final String ncw = "\\w+$";public static boolean checkPassword(String targetString) {String opStr = targetString;boolean isLegal = false;boolean hasSpecChar = false;char[] charArray = opStr.toCharArray();for (char c : charArray) {if (SPEC_CHARACTERS.contains(String.valueOf(c))) {hasSpecChar = true;// 替换此字符串opStr = opStr.replace(c, ' ');}}String excSpecCharStr = opStr.replace(" ", "");boolean isPureNum = pile(numberic).matcher(excSpecCharStr).matches();boolean isPureChar = pile(character).matcher(excSpecCharStr).matches();boolean isNumAndChar = pile(number_and_character).matcher(excSpecCharStr).matches();isLegal = ((isPureNum && hasSpecChar)|| (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;System.out.println("字符串:" + targetString + ",是否符合规则:" + isLegal);System.out.println("---------------");return isLegal;}public static void main(String[] args) {checkPassword("fasdagd");checkPassword("41234123");checkPassword("#$%^&&*(");checkPassword("fasd$$");checkPassword("41234%%%");checkPassword("fasd41^(324");checkPassword("fa413%^&*");checkPassword("&%fa413%^&*");}
测试结果: