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

.NET 6 Web API FluentValidation正则校验未拦截非法字符问题

问题原因

你当前的校验不生效来自两个核心错误:

  • 正则字符范围书写错误:你配置的[z-a0-9-]中,小写字母范围写为逆序的z-a,正确的小写字母范围应为a-z,逆序写法无法正确匹配所有小写字母。
  • 正则缺少全字符串匹配锚点:FluentValidation的Matches()规则默认执行部分匹配逻辑,只要字符串中存在任意片段符合正则规则就会判定校验通过,不需要整个字符串完全符合规则。测试用例FileName中包含连续的小写字母,刚好命中你写的正则片段,因此被错误判定为校验通过。
修复步骤
  1. 修改配置文件中存储的正则规则为以下带首尾锚点的正确格式:

    ^[a-z0-9-]+$
    

    规则各部分含义:

    • ^:匹配字符串起始位置,避免字符串开头出现非法字符
    • [a-z0-9-]+:匹配1个及以上的小写字母、数字、连字符
    • $:匹配字符串结束位置,避免字符串末尾出现非法字符

    注意:若你的业务允许空字符串,可将+替换为*;如果需要严格避免多行模式下的匹配偏差,可将^/$替换为\A/\z。

  2. 修正测试用例逻辑:你当前将本应校验失败的非法入参(如FileName)放在了「校验通过」的测试集合中,测试逻辑本身存在错误。需要将合法、非法用例拆分到不同测试方法中,参考代码如下:

    [Theory]
    // 合法入参,应通过校验
    [InlineData("62c1a17e6b09e88d43cbb087-transactionreport")]
    [InlineData("test-json-20220619324234")]
    [InlineData("62c1a17e6b09e88d43cbb087")]
    [InlineData("test")]
    [InlineData("-json-")]
    [InlineData("20220619324234")]
    [InlineData("2022--06193--24234")]
    public async Task ValidateCreateFileRequest_ValidInput_PassValidation(string name)
    {
        var request = new CreateFileRequest { Name = name };
        var result = _validator.TestValidate(request);
        result.ShouldNotHaveValidationErrorFor(m => m.Name);
    }
    
    [Theory]
    // 非法入参,应触发校验失败
    [InlineData("FileName")] // 包含大写字母
    [InlineData("test_json")] // 包含下划线
    [InlineData("test space")] // 包含空格
    [InlineData("a-")] // 长度不足3位
    public async Task ValidateCreateFileRequest_InvalidInput_FailValidation(string name)
    {
        var request = new CreateFileRequest { Name = name };
        var result = _validator.TestValidate(request);
        result.ShouldHaveValidationErrorFor(m => m.Name);
    }
    

修改完成后,只有整个字符串完全由小写字母、数字、连字符组成时才会通过校验,出现任意非法字符都会触发你配置的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:31:27