1. 需求
对用户密码的强度进行校验,要求用户密码达到一定的强度,符合安全性要求。
1.1. 基础版需求
密码必须由字母和数字组成(同时包括数字和数字);密码长度大于等于8个字符。
1.2. 进阶版需求
密码由这四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。
2. 基础版解析
需求:密码必须由字母和数字组成(同时包括数字和数字);密码长度大于等于8个字符。
2.1. 原理
使用正则表达式校验字符串。
正则表达式构建思路(负向预查模式):
- 字符为数字或字母;
- 不能全是数字;
- 不能全是字母;
- 字符数量大于等于8.
2.2. 核心代码
package org.example;
import java.util.regex.Pattern;
/**
* 密码校验器。
*/
public class PasswordValidator {
/**
* 密码由数字和下划线组成,且大于等于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. 正则表达式含义解析
含义 | 正则表达式 |
---|---|
字符串开头 | ^ |
字符为数字或字母 | [0-9A-Za-z] |
不全是数字 | (?![0-9]+$) |
不全是字母 | (?![a-zA-Z]+$) |
字符数量大于等于8 | {8,} |
字符串结尾 | $ |
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. 运行结果
3. 进阶版解析
需求:密码由四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。
3.1. 原理
使用正则表达式校验字符串。
正则表达式构建思路(负向预查模式):
- 密码只包含
数字、大写字母、小写字母和特殊字符
; - 不全是
数字,或大写字母,或小写字母
; - 不全是
数字,或大写字母,或特殊字符
; - 不全是
数字,或小写字母,或特殊字符
; - 不全是
大写字母,或小写字母,或特殊字符
; - 字符数量大于等于8.
3.2. 核心代码
import java.util.regex.Pattern;
/**
* 密码校验器。
*/
public class PasswordValidator {
/**
* 密码由四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。
*/
public static boolean isValid(String password) {
// 正则表达式的内容如下:
// ^(?![0-9A-Za-z]+$)(?![0-9A-Z\W]+$)(?![0-9a-z\W]+$)(?![A-Za-z\W]+$)[0-9A-Za-z~!@#$%^&*()__+`\-={}|[\]\\:";'<>?,./]{8,}$
// 在 Java 中使用,需要转义;转义后的结果如下。
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. 正则表达式含义解析
含义 | 正则表达式 |
---|---|
字符串开头 | ^ |
密码只包含数字、大写字母、小写字母和特殊字符 ; |
[0-9A-Za-z~!@#$%^&*()_+`-={}|[]\:";'<>?,./] |
不全是 数字,或大写字母,或小写字母 ; |
(?![0-9A-Za-z]+$) |
不全是 数字,或大写字母,或特殊字符 ; |
(?![0-9A-Z\W]+$) |
不全是 数字,或小写字母,或特殊字符 ; |
(?![0-9a-z\W]+$) |
不全是 大写字母,或小写字母,或特殊字符 ; |
(?![A-Za-z\W]+$) |
字符数量大于等于8 | {8,} |
字符串结尾 | $ |
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. 运行结果
4. Gitee示例项目(idea)
密码校验器Demo
5. 参考
java正则校验,密码必须由字母和数字组成文章来源:https://www.toymoban.com/news/detail-692948.html
几种常见的密码校验正则表达式文章来源地址https://www.toymoban.com/news/detail-692948.html
到了这里,关于Java密码校验(正则表达式):密码由这四种元素组成(数字、大写字母、小写字母、特殊字符),且必须包含全部四种元素;密码长度大于等于8个字符。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!