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


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))
{
...
}

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.


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

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.


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

1

if (MyGuid! = Guild.Empty)

{

// Prawidłowa gildia

}

else {

// Nieprawidłowa gildia

}


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.