要求:
1.必須包含數字、大小寫字母
2.密碼位數在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) :表示必須包含數字
- (?=.*[a-z]):表示必須包含小寫字母
- (?=.*[A-Z]):表示必須包含大寫字母
- .{8,16}:表示任意字符重復8-16次
需要注意的是為什么使用(?=.*\\d)
便可以保證一定會存在數字呢?
首先要知道?=表示的是零寬斷言。?=ing即表示匹配以ing結尾的字符串。例如doing,便是匹配其中的do,注意并不會匹配ing。
那(?=.*\\d)
又代表什么意思呢?
匹配一個字符串,該字符串后接任意字符+數字。這個字符串實際上就是空字符串。因此在正則表達式"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$"
中。
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])
都表示匹配那樣一個空字符串。也就意味著我們的密碼必須包含數字、大小寫字母。后續的.{8,16}
則僅代表重復8到16次的任意字符。