【正则表达式】密码长度为8-16位,数字、字母、字符至少包含两种
在网上找了好几个,测试之后都有多多少少的问题,自己一个小时终于憋出来的正则表达,纪念我的处女作!!!
/**
* 校验密码格式 8-16个字符,不包含空格,必须包含数字,字母或字符至少两种
*
* @param value
* @return
* @author Super WD
*/
public static boolean checkPasswordFormal(String value) {
//最接近的
//String regex = "^(?!^(\\d+|[a-zA-Z]+|[~!@#$%^&*?/]+)$)^[\\w~!@#$%^&*?/]{8,16}$";
//纯字符不行
//String regex = "(?!.*\\s)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^[^\\s\\u4e00-\\u9fa5]{8,16}";
//中文 和 纯字符 不行
//String regex = "(?!.*\\s)(?!^[\\u4e00-\\u9fa5]+$)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{8,16}$";
//无敌的我 终将走向无敌 Super WD
String regex = "^(?=.*\\d)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^[^\\s\\u4e00-\\u9fa5]{8,16}";
return value.matches(regex);
}
我并不觉得枚举是一个不好的测试方法,手动微笑(* ̄︶ ̄)
public static void main(String[] args) {
System.out.println(checkPasswordFormal("!@~#$^%&^%#@"));
System.out.println(checkPasswordFormal("12345678}{|"));
System.out.println(checkPasswordFormal("A12345678"));
System.out.println(checkPasswordFormal("12345678:;;"));
System.out.println(checkPasswordFormal("444412345678"));
System.out.println(checkPasswordFormal("1234)5678"));
System.out.println(checkPasswordFormal("、、、、、、、、"));
System.out.println(checkPasswordFormal("11111111"));
System.out.println(checkPasswordFormal("bbbbbbbbb"));
System.out.println(checkPasswordFormal("无1bbbbbbb"));
System.out.println(checkPasswordFormal("12345678900"));
System.out.println(checkPasswordFormal("a1234567"));
System.out.println(checkPasswordFormal(",12345678"));
System.out.println(checkPasswordFormal("ijhfsshahahah"));
System.out.println(checkPasswordFormal(".,.,.,,.,.,."));
System.out.println(checkPasswordFormal("chaojiwudi22ah"));
System.out.println(checkPasswordFormal(".,.,.,,.,55"));
System.out.println(checkPasswordFormal("123456781234654687321343513213"));
}
测试结果