如何验证GUID是GUID


Answers:



9

当我仅测试一个字符串以查看它是否为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))
{
...
}

5
2018return Guid.TryParse(value, out var _);
waitforit 18/09/15

7

GUID是一个16字节(128位)的数字,通常由32个字符的十六进制字符串表示。GUID(以十六进制形式)不需要包含任何字母字符,尽管可能是偶然的。如果要以十六进制形式定位GUID,则可以检查字符串长度是否为32个字符(在去除破折号和大括号之后),并且仅包含字母AF和数字。

存在某些显示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-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;
    }
}

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转换而返回该值不是问题。


2
为什么要在Guid.Empty上使用MagicNumbers?
mattumotu


1

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

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


0

使用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#。
Pimenta
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.