java正则匹配6-20位字母、数字、特殊符号最少满足其中两种

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 6-20位 字母、数字、符号最少任意两种组合
 * 字母、数字
 * 字母、符号
 * 数字、符号
 * 字母、数字、符号
 */
public class PasswordUtils {

    public static void main(String[] args) {

        String specialCharacter="[_`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?-]";
        String word="[a-zA-Z]";
        String number="[0-9]";

        StringBuilder regexBuilder=new StringBuilder();
        regexBuilder.append("^");
        regexBuilder.append("[");
        regexBuilder.append("(").append(word).append("&").append(number).append(")");
        regexBuilder.append("|");
        regexBuilder.append("(").append(word).append("&").append(specialCharacter).append(")");
        regexBuilder.append("|");
        regexBuilder.append("(").append(number).append("&").append(specialCharacter).append(")");
        regexBuilder.append("|");
        regexBuilder.append("(").append(word).append("&").append(number).append("&").append(specialCharacter).append(")");
        regexBuilder.append("]");
        regexBuilder.append("{6,20}");
        regexBuilder.append("$");

        String input="z34-_";

        String regex=regexBuilder.toString();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input); // 获取 matcher 对象

        System.out.println(m.matches());
    }

}

 

你可能感兴趣的:(java正则匹配6-20位字母、数字、特殊符号最少满足其中两种)