需求
对登录密码进行校验,需要密码必须由字母和数字组成(同时包括数字和数字),且大于等于8个字符。
原理
使用正则表达式校验字符串。
正则表达式构建思路:
- 字符为数字或字母;
- 不能全是数字;
- 不能全是字母;
- 字符数量大于等于8.
核心代码
package org.example;
import java.util.regex.Pattern;
/**
* 密码检查器。
*/
public class PasswordChecker {
/**
* 密码由数字和下划线组成,且大于等于8个字符。
*/
public static boolean isCharacterAndNumber(String password) {
String pattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$";
return Pattern.matches(pattern, password);
}
}
解释
需求 | 正则表达式 |
---|---|
字符串开头 | ^ |
字符为数字或字母 | [0-9A-Za-z] |
不全是数字 | (?![0-9]+$) |
不全是字母 | (?![a-zA-Z]+$) |
字符数量大于等于8 | {8,} |
字符串结尾 | $ |
测试用例
示例代码
package org.example;
import static org.example.PasswordChecker.isCharacterAndNumber;
public class Main {
public static void main(String[] args) {
System.out.println(isCharacterAndNumber(""));
System.out.println(isCharacterAndNumber("中文"));
System.out.println(isCharacterAndNumber("abc-1234567"));
System.out.println(isCharacterAndNumber("1234567"));
System.out.println(isCharacterAndNumber("abc"));
System.out.println(isCharacterAndNumber("zzz111"));
System.out.println(isCharacterAndNumber("zzz12345"));
System.out.println(isCharacterAndNumber("abc1234567"));
System.out.println(isCharacterAndNumber("abc12345bbb"));
}
}
运行结果
Gitee示例项目(idea)
密码检查器
参考
java正则校验,密码必须由字母和数字组成