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

如何用C#检测文件名是否为哈希值?正则表达式问题排查

解决C#中检测哈希格式文件名的问题

我来帮你搞定这个问题!你当前的代码只能匹配32位无连字符的十六进制哈希,但你的目标哈希文件名是带连字符分隔的20组两位十六进制字符,所以正则不匹配很正常。咱们来修改代码,同时支持两种常见的哈希文件名格式:

步骤1:先处理文件名(去掉扩展名)

首先要把文件名的扩展名(比如.zip)去掉,只检查文件名的主体部分是否为哈希格式,避免扩展名干扰判断。

步骤2:更新正则表达式

新的正则需要同时匹配两种情况:

  • 带连字符的格式:20组两位十六进制字符,每组用-分隔(比如你提供的98-80-7D-E5-50-A1-73-59-7F-FC-1C-CB-10-0F-39-D7-C2-97-88-44)
  • 无连字符的格式:32位连续十六进制字符(你原来的逻辑)

修改后的完整代码

using System.IO;
using System.Text.RegularExpressions;

private static bool IsFileHash(string input)
{
    if (string.IsNullOrEmpty(input))
        return false;

    // 提取不带扩展名的文件名主体
    string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(input);

    // 正则匹配两种哈希格式:带连字符的20组两位十六进制,或32位无连字符十六进制
    string hashPattern = @"^([0-9a-fA-F]{2}-){19}[0-9a-fA-F]{2}$|^[0-9a-fA-F]{32}$";
    
    // 启用忽略大小写,让匹配更灵活(支持大写/小写十六进制字符)
    return Regex.IsMatch(fileNameWithoutExtension, hashPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
}

测试验证

  • 输入98-80-7D-E5-50-A1-73-59-7F-FC-1C-CB-10-0F-39-D7-C2-97-88-44.zip → 返回true
  • 输入model.zip → 返回false
  • 输入a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4.zip(32位无连字符哈希)→ 返回true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:42:31