1. 需求
對用戶密碼的強(qiáng)度進(jìn)行校驗(yàn),要求用戶密碼達(dá)到一定的強(qiáng)度,符合安全性要求。
1.1. 基礎(chǔ)版需求
密碼必須由字母和數(shù)字組成(同時包括數(shù)字和數(shù)字);密碼長度大于等于8個字符。
1.2. 進(jìn)階版需求
密碼由這四種元素組成(數(shù)字、大寫字母、小寫字母、特殊字符),且必須包含全部四種元素;密碼長度大于等于8個字符。
2. 基礎(chǔ)版解析
需求:密碼必須由字母和數(shù)字組成(同時包括數(shù)字和數(shù)字);密碼長度大于等于8個字符。
2.1. 原理
使用正則表達(dá)式校驗(yàn)字符串。
正則表達(dá)式構(gòu)建思路(負(fù)向預(yù)查模式):
- 字符為數(shù)字或字母;
- 不能全是數(shù)字;
- 不能全是字母;
- 字符數(shù)量大于等于8.
2.2. 核心代碼
package org.example;
import java.util.regex.Pattern;
/**
* 密碼校驗(yàn)器。
*/
public class PasswordValidator {
/**
* 密碼由數(shù)字和下劃線組成,且大于等于8個字符。
*/
public static boolean isCharacterAndNumber(String password) {
String pattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$";
return Pattern.matches(pattern, password);
}
}
2.3. 正則表達(dá)式含義解析
含義 | 正則表達(dá)式 |
---|---|
字符串開頭 | ^ |
字符為數(shù)字或字母 | [0-9A-Za-z] |
不全是數(shù)字 | (?![0-9]+$) |
不全是字母 | (?![a-zA-Z]+$) |
字符數(shù)量大于等于8 | {8,} |
字符串結(jié)尾 | $ |
2.4. 測試用例
2.4.1. 示例代碼
package org.example;
public class TestBase {
public static void main(String[] args) {
isValid("");
isValid("中文");
isValid("abc-1234567");
isValid("1234567");
isValid("abc");
isValid("zzz111");
isValid("zzz12345");
isValid("abc1234567");
isValid("abc12345bbb");
}
private static void isValid(String text) {
System.out.println(text + " === " + PasswordValidator.isCharacterAndNumber(text));
}
}
2.4.2. 運(yùn)行結(jié)果
3. 進(jìn)階版解析
需求:密碼由四種元素組成(數(shù)字、大寫字母、小寫字母、特殊字符),且必須包含全部四種元素;密碼長度大于等于8個字符。
3.1. 原理
使用正則表達(dá)式校驗(yàn)字符串。
正則表達(dá)式構(gòu)建思路(負(fù)向預(yù)查模式):
- 密碼只包含
數(shù)字、大寫字母、小寫字母和特殊字符
; - 不全是
數(shù)字,或大寫字母,或小寫字母
; - 不全是
數(shù)字,或大寫字母,或特殊字符
; - 不全是
數(shù)字,或小寫字母,或特殊字符
; - 不全是
大寫字母,或小寫字母,或特殊字符
; - 字符數(shù)量大于等于8.
3.2. 核心代碼
import java.util.regex.Pattern;
/**
* 密碼校驗(yàn)器。
*/
public class PasswordValidator {
/**
* 密碼由四種元素組成(數(shù)字、大寫字母、小寫字母、特殊字符),且必須包含全部四種元素;密碼長度大于等于8個字符。
*/
public static boolean isValid(String password) {
// 正則表達(dá)式的內(nèi)容如下:
// ^(?![0-9A-Za-z]+$)(?![0-9A-Z\W]+$)(?![0-9a-z\W]+$)(?![A-Za-z\W]+$)[0-9A-Za-z~!@#$%^&*()__+`\-={}|[\]\\:";'<>?,./]{8,}$
// 在 Java 中使用,需要轉(zhuǎn)義;轉(zhuǎn)義后的結(jié)果如下。
String pattern = "^(?![0-9A-Za-z]+$)(?![0-9A-Z\\W]+$)(?![0-9a-z\\W]+$)(?![A-Za-z\\W]+$)[0-9A-Za-z~!@#$%^&*()_+`\\-={}|\\[\\]\\\\:\";'<>?,./]{8,}$";
return Pattern.matches(pattern, password);
}
}
3.3. 正則表達(dá)式含義解析
含義 | 正則表達(dá)式 |
---|---|
字符串開頭 | ^ |
密碼只包含數(shù)字、大寫字母、小寫字母和特殊字符 ; |
[0-9A-Za-z~!@#$%^&*()_+`-={}|[]\:";'<>?,./] |
不全是 數(shù)字,或大寫字母,或小寫字母 ; |
(?![0-9A-Za-z]+$) |
不全是 數(shù)字,或大寫字母,或特殊字符 ; |
(?![0-9A-Z\W]+$) |
不全是 數(shù)字,或小寫字母,或特殊字符 ; |
(?![0-9a-z\W]+$) |
不全是 大寫字母,或小寫字母,或特殊字符 ; |
(?![A-Za-z\W]+$) |
字符數(shù)量大于等于8 | {8,} |
字符串結(jié)尾 | $ |
3.4. 測試用例
3.4.1. 示例代碼
public class TestComplex {
public static void main(String[] args) {
isValid("");
isValid("中文");
isValid("123456789");
isValid("aaabbbccc");
isValid("AAABBBCCCabc");
isValid("AAAbbb123");
isValid("abcABC1@中文");
isValid("aB1@");
isValid("abcABC1@");
isValid("aaaBBB111@");
isValid("aaabbbBBB111~!@#$%^&*()_+=-`{}|[]\\:\";'<>?,./");
}
private static void isValid(String text) {
System.out.println(text + " === " + PasswordValidator.isValid(text));
}
}
3.4.2. 運(yùn)行結(jié)果
4. Gitee示例項目(idea)
密碼校驗(yàn)器Demo
5. 參考
java正則校驗(yàn),密碼必須由字母和數(shù)字組成文章來源:http://www.zghlxwxcb.cn/news/detail-692948.html
幾種常見的密碼校驗(yàn)正則表達(dá)式文章來源地址http://www.zghlxwxcb.cn/news/detail-692948.html
到了這里,關(guān)于Java密碼校驗(yàn)(正則表達(dá)式):密碼由這四種元素組成(數(shù)字、大寫字母、小寫字母、特殊字符),且必須包含全部四種元素;密碼長度大于等于8個字符。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!