Das Überprüfen der GUID ist eine GUID

Antworten:

9

Wenn ich nur eine Zeichenfolge teste, um festzustellen, ob es sich um eine GUID handelt, möchte ich nicht wirklich ein Guid-Objekt erstellen, das ich nicht benötige. So...

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

Und so verwenden Sie es:

string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
Doug Clutter
quelle
5
Update für 2018return Guid.TryParse(value, out var _);
Waitforit
7

Eine GUID ist eine 16-Byte-Zahl (128 Bit), die normalerweise durch eine 32-stellige hexadezimale Zeichenfolge dargestellt wird. Eine GUID (in hexadezimaler Form) muss keine Alpha-Zeichen enthalten, obwohl dies wahrscheinlich zufällig der Fall ist. Wenn Sie auf eine GUID in hexadezimaler Form abzielen, können Sie überprüfen, ob die Zeichenfolge 32 Zeichen lang ist (nachdem Sie Bindestriche und geschweifte Klammern entfernt haben) und nur Buchstaben AF und Zahlen enthält.

Es gibt einen bestimmten Stil für die Darstellung von GUIDs (Dash-Placement), und reguläre Ausdrücke können verwendet werden, um dies zu überprüfen, z.

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

von http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . Es sollte jedoch betont werden, dass die GUID tatsächlich eine 128-Bit-Zahl ist und auf verschiedene Arten dargestellt werden kann.

tofutim
quelle
6

Es gibt keine Garantie dafür, dass eine GUID alphanumerische Zeichen enthält. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFFist eine gültige GUID 00000000-0000-0000-0000-000000000000und alles dazwischen.

Wenn Sie .NET 4.0 verwenden, können Sie die obige Antwort für Guid.Parse und Guid.TryParse verwenden. Andernfalls können Sie Folgendes tun:

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;
    }
}
Kann Gencer
quelle
2

Basierend auf der akzeptierten Antwort habe ich eine Erweiterungsmethode wie folgt erstellt:

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

Wobei "MagicNumbers.defaultGuid" nur "eine leere" Null-Guid "00000000-0000-0000-0000-000000000000" ist.

In meinem Fall war es kein Problem, diesen Wert als Ergebnis einer ungültigen ToGuid-Konvertierung zurückzugeben.

a4bike
quelle
2
Warum MagicNumbers über Guid.Empty verwenden?
Mattumotu
1

Gibt die Guid zurück, wenn sie gültig ist, andernfalls wird Guid.Empty zurückgegeben

if (!Guid.TryParse(yourGuidString, out yourGuid)){
          yourGuid= Guid.Empty;
}
verrückt
quelle
1

if (MyGuid! = Guild.Empty)

{

// Gültige Gilde

}}

sonst {

// Ungültige Gilde

}}

Sameer Bahad
quelle
0

Verwenden Sie die Standardfunktionalität des GUID-Konstruktors

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
quelle
Beachten Sie, dass die Frage für die C # -Sprache gestellt wurde und die bereitgestellte Antwort in VB.Net ist. Wäre schön, es für C # abzubilden.
Pimenta