Jak sprawdzić, czy identyfikator GUID jest identyfikatorem GUID

Odpowiedzi:

172

Sprawdź, czy te informacje pomogą: -

Guid guidResult = Guid.Parse(inputString)

( http://msdn.microsoft.com/en-us/library/system.guid.parse.aspx )

bool isValid = Guid.TryParse(inputString, out guidOutput)

http://msdn.microsoft.com/en-us/library/system.guid.tryparse.aspx

Głębokie
źródło
4
.NET 4.0: drugie łącze ... w innym przypadku, pierwsze łącze. +1
Khepri
C # 7.0 używa var lub Guid lub _ dla zmiennych inline out bool isValid = Guid.TryParse(inputString, out var tempGuid);lubbool isValid = Guid.TryParse(inputString, out _);
xadriel
9

Kiedy tylko testuję ciąg, aby sprawdzić, czy jest to identyfikator GUID, tak naprawdę nie chcę tworzyć obiektu Guid, którego nie potrzebuję. Więc...

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

A oto jak tego używasz:

string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
Doug Clutter
źródło
6
aktualizacja na 2018 rokreturn Guid.TryParse(value, out var _);
waitforit
7

Identyfikator GUID to 16-bajtowa (128-bitowa) liczba, zwykle reprezentowana przez 32-znakowy ciąg szesnastkowy. GUID (w postaci szesnastkowej) nie musi zawierać żadnych znaków alfanumerycznych, chociaż przypadkowo prawdopodobnie tak. Jeśli celujesz w identyfikator GUID w postaci szesnastkowej, możesz sprawdzić, czy ciąg ma 32 znaki (po usunięciu myślników i nawiasów klamrowych) i zawiera tylko litery AF i cyfry.

Istnieje pewien styl prezentacji identyfikatorów GUID (umieszczanie myślników) i można to sprawdzić za pomocą wyrażeń regularnych, np.

@"^(\{{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})$"

z http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . To powiedziawszy, należy podkreślić, że identyfikator GUID jest naprawdę 128-bitową liczbą i może być reprezentowany na wiele różnych sposobów.

tofutim
źródło
6

Nie ma gwarancji, że identyfikator GUID zawiera znaki alfabetu. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFFjest prawidłowym identyfikatorem GUID, więc jest 00000000-0000-0000-0000-000000000000i wszystko pomiędzy.

Jeśli używasz .NET 4.0, możesz użyć powyższej odpowiedzi dla Guid.Parse i Guid.TryParse. W przeciwnym razie możesz zrobić coś takiego:

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;
    }
}
Can Gencer
źródło
2

Na podstawie zaakceptowanej odpowiedzi utworzyłem następującą metodę rozszerzenia:

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;
}

Gdzie „MagicNumbers.defaultGuid” to po prostu „pusty” zero Guid „00000000-0000-0000-0000-000000000000”.

W moim przypadku zwrócenie tej wartości w wyniku nieprawidłowej konwersji ToGuid nie było problemem.

a4bike
źródło
2
Dlaczego warto używać MagicNumbers zamiast Guid.Empty?
mattumotu
1

Zwróci Guid, jeśli jest ważny Guid, w przeciwnym razie zwróci Guid.Empty

if (!Guid.TryParse(yourGuidString, out yourGuid)){
          yourGuid= Guid.Empty;
}
maniak
źródło
1

if (MyGuid! = Guild.Empty)

{

// Prawidłowa gildia

}

else {

// Nieprawidłowa gildia

}

Sameer Bahad
źródło
0

Użyj standardowych funkcji konstruktora 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
xjfw34
źródło
Należy pamiętać, że pytanie zostało stworzone dla języka C #, a podana odpowiedź znajduje się w VB.Net. Byłoby miło zmapować go dla C #.
Pimenta