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

正则匹配校验输入失效求助:如何正确校验6个0-99的数字?

问题分析与修复

你的代码问题出在校验顺序和正则逻辑错误:

  • 第一个正则^(?!\\s)\\d{1,2}( \\d{1,2})*(?!\\s)$同时校验了「首尾无空格」和「所有数字是1-2位」,当输入包含三位数时,这个正则直接不匹配,触发首尾空格的错误提示,根本没机会走到数字范围的校验分支。
  • 第二个正则^(\\d{1,2} ){5}\\d{1,2}$强制要求数字之间只能是单个空格,不符合你「1个或多个空格分隔」的需求。

修复方案(分步校验,易读易维护)

把校验拆分成独立步骤,按逻辑顺序执行:

public String validateInput(String numbers) {
    // 检查输入为空
    if (numbers == null || numbers.isEmpty()) {
        return "Error: Input cannot be empty";
    }

    // 检查首尾是否有空格
    if (numbers.startsWith(" ") || numbers.endsWith(" ")) {
        return "Error: Cannot have spaces before the first number or after the last number";
    }

    // 按1个或多个空格分割数字
    String[] nums = numbers.split("\\s+");

    // 检查是否恰好6个数字
    if (nums.length != 6) {
        return "Error: Must input exactly 6 numbers";
    }

    // 检查每个数字是否在0-99之间
    for (String numStr : nums) {
        int num;
        try {
            num = Integer.parseInt(numStr);
        } catch (NumberFormatException e) {
            return "Error: All inputs must be valid integers";
        }
        if (num < 0 || num > 99) {
            return "Error: All numbers must be between 0 and 99 inclusive";
        }
    }

    // 所有校验通过
    return "";
}

修复说明

  1. 用startsWith/endsWith替代正则检查首尾空格,逻辑更直观,避免正则匹配的歧义。
  2. 分割字符串后先检查数字数量是否为6,明确提示数量错误。
  3. 逐个解析数字并检查范围,能精准定位到数字越界的问题,同时捕获非整数输入的情况。

可选:正则校验方案(单一正则匹配所有条件)

如果你坚持用正则一次性匹配所有规则,可以用这个正则:^\\d{1,2}(?:\\s+\\d{1,2}){5}$,但这种方式无法区分不同类型的错误(比如是数量不对还是数字越界),适合只需要判断合法/非法的场景:

public String validateInput(String numbers) {
    if (numbers == null || numbers.isEmpty()) {
        return "Error: Input cannot be empty";
    }

    // 匹配6个0-99的数字,中间用1+空格分隔,首尾无空格
    if (!numbers.matches("^\\d{1,2}(?:\\s+\\d{1,2}){5}$")) {
        // 这种方式无法细分错误类型,只能给出通用提示
        return "Error: Input must be 6 numbers (0-99) separated by one or more spaces, no leading/trailing spaces";
    }

    // 额外检查数字范围(因为正则只能匹配位数,09这种格式parseInt后是9,不影响结果,但严格场景可保留)
    String[] nums = numbers.split("\\s+");
    for (String numStr : nums) {
        int num = Integer.parseInt(numStr);
        if (num < 0 || num > 99) {
            return "Error: All numbers must be between 0 and 99 inclusive";
        }
    }

    return "";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:43