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

如何校验请求中特定格式String参数的合法性

解决方案:用正则表达式精准校验格式

只靠contains("-")只能做最基础的判断,要覆盖所有非法场景,直接用正则表达式做全量校验是最高效的方式,具体步骤如下:

  1. 先明确合法格式的核心规则(从你给出的示例推导):

    • 字符串必须被-分割为恰好4个非空片段
    • 片段1:至少1位数字(比如1、25)
    • 片段2:至少2位大写英文字母(比如BB、GG)
    • 片段3:可以是至少1位数字(比如94)或至少2位大写英文字母(比如JJ)
    • 片段4:至少1位数字(比如675757、656)
    • 不能以-开头或结尾,也不能出现连续-
  2. 对应正则表达式:

    ^\d+-[A-Z]{2,}-(?:[A-Z]{2,}|\d+)-\d+$
    

    简单解释:

    • ^和$:限定匹配整个字符串,避免部分匹配
    • \d+:匹配1位及以上数字
    • [A-Z]{2,}:匹配2位及以上大写英文字母
    • (?:[A-Z]{2,}|\d+):非捕获分组,同时支持片段3的两种合法格式
  3. 替换原有判断逻辑:
    把原来的contains判断换成正则匹配,代码示例:

    String param = getExVariable();
    Pattern pattern = Pattern.compile("^\\d+-[A-Z]{2,}-(?:[A-Z]{2,}|\\d+)-\\d+$");
    Matcher matcher = pattern.matcher(param);
    if (!matcher.matches()) {
        return error;
    }
    
  4. 能覆盖的所有非法场景:

    • 不含-的字符串(如FF5544335)
    • 分割后片段数不为4的(如25-JJ-94)
    • 以-开头/结尾的(如44-BB-、-1-BB-JJ-675757)
    • 片段格式不符合要求的(如1-bb-JJ-675757小写字母、1-B-JJ-675757单个字母)

如果你的格式规则有微调(比如片段3允许单个字母、片段1固定1位数字),只需要修改正则里的对应部分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:12:49