如何验证GUID是否为有效的GUID

167
如何确定一个字符串是 GUID 还是仅由数字组成,GUID 是否一定包含至少一个字母字符?

可能是重复的问题:有没有办法区分GUID和随机数? - sharptooth
10个回答

269

看看这些是否有帮助:

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

6
.NET 4.0:第二个链接...否则,第一个链接。+1 - Khepri
9
C# 7.0 中可使用 var、Guid 或下划线作为内联 out 变量的占位符,例如:bool isValid = Guid.TryParse(inputString, out var tempGuid);bool isValid = Guid.TryParse(inputString, out _); - xadriel

25

这是一个相对简洁,现代化的C#方法,它禁止了out变量的使用:

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

16

当我只是想测试一个字符串是否为 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))
{
...
}

13
2018年更新:return Guid.TryParse(value, out var _); 的翻译是:尝试将字符串值解析为 GUID,如果成功则返回 true,否则返回 false。 - rethabile

9
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位的数字,它可以用多种不同的方式表示。


6

并不保证GUID包含字母。例如,FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF00000000-0000-0000-0000-000000000000都是有效的GUID。

如果你正在使用.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;
    }
}

3
if(MyGuid != Guid.Empty) 
{
   // Valid Guid
} 
else
{
   // Invalid Guid
}

2

根据被接受的答案,我创建了以下扩展方法:

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转换的结果返回并不是一个问题。


5
为什么要使用 MagicNumbers 而不是 Guid.Empty? - mattumotu

2

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

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

1

1
使用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

2
请注意,该问题是针对C#语言提出的,而提供的答案是使用VB.Net编写的。最好将其映射到C#。 - Pimenta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接