| package com.doumee.core.utils; | 
|   | 
| import java.util.regex.Pattern; | 
|   | 
| /** | 
|  * Java正则校验密码至少包含:字母数字特殊符号中的2种 | 
|  */ | 
| public class PwdCheckUtil { | 
|   | 
|     /** | 
|      * 假定设置密码时,密码规则为:  字母、数字、特殊符号,至少匹配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 = Pattern.compile(numberic).matcher(excSpecCharStr).matches(); | 
|         boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches(); | 
|         boolean isNumAndChar = Pattern.compile(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%^&*"); | 
|     } | 
|   | 
| } |