【问题标题】:How to validate GUID is a GUID如何验证 GUID 是 GUID
【发布时间】:2011-06-02 06:02:11
【问题描述】:

如何确定字符串是否包含 GUID 而不是仅包含数字字符串。

GUID 是否始终包含至少 1 个字母字符?

【问题讨论】:

标签: c# asp.net string guid


【解决方案1】:

看看这些是否有帮助:-

  1. Guid.Parse - Docs
Guid guidResult = Guid.Parse(inputString)
  1. Guid.TryParse - Docs
bool isValid = Guid.TryParse(inputString, out guidOutput)

【讨论】:

  • .NET 4.0:第二个链接...否则,第一个链接。 +1
  • C# 7.0 使用 var 或 Guid 或 _ 作为内联输出变量 bool isValid = Guid.TryParse(inputString, out var tempGuid);bool isValid = Guid.TryParse(inputString, out _);
【解决方案2】:

当我只是测试一个字符串以查看它是否是一个 GUID 时,我真的不想创建一个我不需要的 Guid 对象。所以...

public static class GuidEx
{
    public static bool IsGuid(string value)
    {
        Guid x;
        return Guid.TryParse(value, out x);
    }
}

这是你如何使用它的:

string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}

【讨论】:

  • 2018 年更新return Guid.TryParse(value, out var _);
【解决方案3】:

GUID 是一个 16 字节(128 位)的数字,通常由 32 个字符的十六进制字符串表示。 GUID(十六进制形式)不需要包含任何字母字符,尽管它很可能会包含。如果您的目标是十六进制形式的 GUID,您可以检查该字符串是否为 32 个字符长(去掉破折号和大括号后)并且只有字母 A-F 和数字。

有一定的 GUID 呈现方式(破折号放置),可以使用正则表达式来检查这一点,例如,

@"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$"

来自http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm。也就是说,应该强调的是,GUID 实际上是一个 128 位的数字,可以用多种不同的方式表示。

【讨论】:

    【解决方案4】:

    不保证 GUID 包含字母字符。 FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF 是一个有效的 GUID,00000000-0000-0000-0000-000000000000 也是如此。

    如果您使用的是 .NET 4.0,则可以将上述答案用于 Guid.Parse 和 Guid.TryParse。否则,您可以执行以下操作:

    public static bool TryParseGuid(string guidString, out Guid guid)
    {
        if (guidString == null) throw new ArgumentNullException("guidString");
        try
        {
            guid = new Guid(guidString);
            return true;
        }
        catch (FormatException)
        {
            guid = default(Guid);
            return false;
        }
    }
    

    【讨论】:

      【解决方案5】:

      根据接受的答案,我创建了一个扩展方法,如下所示:

      public static Guid ToGuid(this string aString)
      {
          Guid newGuid;
      
          if (string.IsNullOrWhiteSpace(aString))
          {
              return MagicNumbers.defaultGuid;
          }
      
          if (Guid.TryParse(aString, out newGuid))
          {
              return newGuid;
          }
      
          return MagicNumbers.defaultGuid;
      }
      

      其中“MagicNumbers.defaultGuid”只是“一个空的”全零 Guid“00000000-0000-0000-0000-000000000000”。

      在我的情况下,由于 ToGuid 转换无效而返回该值不是问题。

      【讨论】:

      • 为什么使用 MagicNumbers 而不是 Guid.Empty?
      【解决方案6】:
      if(MyGuid != Guid.Empty) 
      {
         // Valid Guid
      } 
      else
      {
         // Invalid Guid
      }
      

      【讨论】:

        【解决方案7】:

        http://en.wikipedia.org/wiki/Globally_unique_identifier

        无法保证 Alpha 版确实存在。

        【讨论】:

          【解决方案8】:

          如果 Guid 是有效的 Guid,则返回 Guid,否则返回 Guid.Empty

          if (!Guid.TryParse(yourGuidString, out yourGuid)){
                    yourGuid= Guid.Empty;
          }
          

          【讨论】:

            【解决方案9】:

            使用 GUID 构造函数标准功能

            Public Function IsValid(pString As String) As Boolean
            
                Try
                    Dim mGuid As New Guid(pString)
                Catch ex As Exception
                    Return False
                End Try
                Return True
            
            End Function
            

            【讨论】:

            • 请注意,问题是针对 C# 语言提出的,并且提供的答案在 VB.Net 中。将它映射到 C# 会很好。
            【解决方案10】:

            这是一种相当简洁的现代 C# 方法,可以抑制 out 变量:

            var isValid = Guid.TryParse(inputString, out _);
            

            【讨论】:

              猜你喜欢
              • 2012-01-10
              • 2018-10-07
              • 2017-11-29
              • 2012-09-14
              • 2020-10-19
              • 1970-01-01
              • 1970-01-01
              • 2018-12-24
              • 1970-01-01
              相关资源
              最近更新 更多