【问题标题】:Regex.Replace overload?正则表达式。替换重载?
【发布时间】:2014-05-27 19:19:21
【问题描述】:

所以我有以下代码,它生成用户上传的文件的文件数据的 sha256 哈希。这工作正常,但有时它包含非法字符(对于 Windows 操作系统)。

所以我想要实现的是尝试捕获来去除非法字符。我已经从 Microsoft 的网站本身中提取了这些信息。但是,当使用 Regex.Replace() 实现时,我被告知它只接受 5 个重载。

这很令人困惑,因为这就是我所拥有的,并且我已经三次检查了我的 hashedfile1name 是一个字符串类型变量。

另一个问题是 try catch 它告诉我它不知道RegexMatchTimeoutException 是什么。但是Microsoft's example 中没有更多的导入/使用语句。

try
{
    FileUpload1.SaveAs("C:\\direct\\uploads\\" + FileUpload1.FileName);
    using (fs = File.OpenRead("C:\\direct\\uploads\\" + FileUpload1.FileName))
    {
        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
        hashedfile1name = Convert.ToBase64String(hash.ComputeHash(bytes));
    }
    try
    {
        Regex.Replace(hashedfile1name, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5));
    }
    catch (RegexMatchTimeoutException)
    {
        hashedfile1name = "";
    }
    FileUpload1.SaveAs("C:\\direct\\uploads\\" + hashedfile1name);
    File.Delete("C:\\direct\\uploads\\" + FileUpload1.FileName);

    Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + " - " + hashedfile1name;
}
catch (Exception ex)
{
    Label1.Text = "ERROR: " + ex.Message.ToString();
}

【问题讨论】:

  • 您使用的是什么版本的框架?看起来您尝试使用的重载是在 4.5 中添加的,并且在早期的框架中对您不可用。
  • 您使用的是哪个版本的 .NET?该重载仅在 .NET 4.5 及更高版本中受支持。
  • RegexMatchTimeoutException 也被添加到 .Net 4.5 中。 msdn.microsoft.com/en-us/library/vstudio/…
  • 好的,如果它是在 4.5 中添加的并且我的目标是 4,那么做同样事情的最佳方法是什么,或者没有过载?我不知道它是否甚至必须超载。
  • 唯一需要防范的base64字符应该是/

标签: c# asp.net regex


【解决方案1】:

Regex.Replace 不会就地替换;它将替换作为字符串返回。片段:

try
{
    Regex.Replace(hashedfile1name, @"[^\w\.@-]", "", RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
catch (RegexMatchTimeoutException)
{
    hashedfile1name = "";
}

可以简单地替换为:

hashedfile1name = Regex.Replace(hashedfile1name, @"[^\w\.@-]", "");

您的代码应该会按预期运行。

(如果要保留整个哈希,可能需要考虑Base-32 编码,它类似于base64,但仅使用字母数字字符。.NET 不包含Base32 方法,但Shane 提供了一个实现回答here。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2015-01-24
    相关资源
    最近更新 更多