You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带特殊字符的Java密码校验器实现问题咨询

无正则实现Java密码校验方案

不用正则的话,通过基础的字符遍历和Character类的内置方法就能实现所有校验规则,实现逻辑如下:

前置准备

首先定义好允许的特殊字符集合,以及各规则的达标标记位:

  • 允许的特殊字符直接用字符串存储:String allowedSpecial = "$#?!_-=%";
  • 为每个校验规则设置布尔类型的标记位,默认值为false代表未达标

各规则校验逻辑

规则1(长度≥8)

直接判断输入密码的长度即可:

// password为接收的用户输入密码
boolean lenOk = password.length() >= 8;

规则2(同时包含大小写字母)

遍历每个字符,分别记录是否出现过大写、小写字母,最后判断两个标记同时为true即可:

boolean hasUpper = false;
boolean hasLower = false;
for (int i = 0; i < password.length(); i++) {
    char c = password.charAt(i);
    if (Character.isUpperCase(c)) hasUpper = true;
    if (Character.isLowerCase(c)) hasLower = true;
}
boolean hasUpperAndLower = hasUpper && hasLower;

规则3(至少一处字母后紧跟数字)

遍历的时候同时取当前字符和下一个相邻字符判断,只要存在任意一组符合要求就标记达标:

boolean hasLetterFollowDigit = false;
// 遍历到倒数第二个字符即可,避免取i+1时数组越界
for (int i = 0; i < password.length() - 1; i++) {
    char current = password.charAt(i);
    char next = password.charAt(i + 1);
    // 当前是字母、下一个是数字即满足要求
    if (Character.isLetter(current) && Character.isDigit(next)) {
        hasLetterFollowDigit = true;
        break; // 找到符合的组合后可以提前结束遍历
    }
}

规则4(包含指定特殊字符)

遍历每个字符,判断是否存在于提前定义的特殊字符列表中:

boolean hasSpecial = false;
for (int i = 0; i < password.length(); i++) {
    char c = password.charAt(i);
    // indexOf返回-1代表字符不在特殊字符列表中
    if (allowedSpecial.indexOf(c) != -1) {
        hasSpecial = true;
        break;
    }
}

完整校验代码示例

可以把多次遍历合并成一次,提升运行效率,完整可运行代码如下:

import java.util.Scanner;

public class PasswordChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入密码:");
        String password = scanner.nextLine();
        scanner.close();

        String allowedSpecial = "$#?!_-=%";
        boolean lenOk = password.length() >= 8;
        boolean hasUpper = false;
        boolean hasLower = false;
        boolean hasLetterFollowDigit = false;
        boolean hasSpecial = false;

        // 一次遍历完成所有规则判断
        for (int i = 0; i < password.length(); i++) {
            char c = password.charAt(i);
            // 大小写判断
            if (Character.isUpperCase(c)) hasUpper = true;
            if (Character.isLowerCase(c)) hasLower = true;
            // 特殊字符判断
            if (allowedSpecial.indexOf(c) != -1) hasSpecial = true;
            // 字母后跟数字判断,避免索引越界
            if (i < password.length() - 1) {
                char next = password.charAt(i + 1);
                if (Character.isLetter(c) && Character.isDigit(next)) {
                    hasLetterFollowDigit = true;
                }
            }
        }
        boolean hasUpperAndLower = hasUpper && hasLower;

        // 输出校验结果
        if (lenOk && hasUpperAndLower && hasLetterFollowDigit && hasSpecial) {
            System.out.println("密码符合合规要求");
        } else {
            System.out.println("密码不符合要求,问题如下:");
            if (!lenOk) System.out.println("- 密码长度不能少于8个字符");
            if (!hasUpperAndLower) System.out.println("- 密码需要同时包含大写和小写英文字母");
            if (!hasLetterFollowDigit) System.out.println("- 密码需要至少存在一处字母后紧跟数字的组合");
            if (!hasSpecial) System.out.println("- 密码需要包含$#?!_-=%中的任意一个特殊字符");
        }
    }
}

内容的提问来源于stack exchange,提问作者pizzawithpineapple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:24:05