要求:
1.必須包含數(shù)字、大小寫(xiě)字母
2.密碼位數(shù)在8-16位
public static boolean checkPas(String pas) {
Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$");
Matcher matcher = pattern.matcher(pas);
return matcher.matches();
}
解釋一下:
- (?=.*\d) :表示必須包含數(shù)字
- (?=.*[a-z]):表示必須包含小寫(xiě)字母
- (?=.*[A-Z]):表示必須包含大寫(xiě)字母
- .{8,16}:表示任意字符重復(fù)8-16次
需要注意的是為什么使用(?=.*\\d) 便可以保證一定會(huì)存在數(shù)字呢?
首先要知道?=表示的是零寬斷言。?=ing即表示匹配以ing結(jié)尾的字符串。例如doing,便是匹配其中的do,注意并不會(huì)匹配ing。
那(?=.*\\d)又代表什么意思呢?
匹配一個(gè)字符串,該字符串后接任意字符+數(shù)字。這個(gè)字符串實(shí)際上就是空字符串。因此在正則表達(dá)式"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$"中。
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])都表示匹配那樣一個(gè)空字符串。也就意味著我們的密碼必須包含數(shù)字、大小寫(xiě)字母。后續(xù)的.{8,16}則僅代表重復(fù)8到16次的任意字符。