web-dev-qa-db-fra.com

Comment valider GUID est un GUID

Comment déterminer si une chaîne contient un GUID vs seulement une chaîne de nombres.

un GUID contiendra-t-il toujours au moins 1 caractère alpha?

67
001

Voir si cela aide: -

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

120
Deepesh

Il n'y a aucune garantie qu'un GUID contienne des caractères alpha. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF Est un GUID valide, de même que 00000000-0000-0000-0000-000000000000 Et tout autre élément intermédiaire.

Si vous utilisez .NET 4.0, vous pouvez utiliser la réponse ci-dessus pour Guid.Parse et Guid.TryParse. Sinon, vous pouvez faire quelque chose comme ça:

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

A GUID est un nombre de 16 octets (128 bits), généralement représenté par une chaîne hexadécimale de 32 caractères. A GUID (sous forme hexadécimale) requis Si vous ciblez un GUID sous forme hexadécimale, vous pouvez vérifier que la chaîne comporte 32 caractères (après avoir supprimé les tirets et les accolades). ) et n'a que des lettres AF et des chiffres.

Il existe un certain style de présentation des GUID (placement de tirets) et des expressions régulières peuvent être utilisées pour vérifier cela, par exemple:

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

from http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . Cela dit, il convient de souligner que le GUID est en réalité un nombre de 128 bits et pourrait être représenté de différentes manières.

6
tofutim

Lorsque je teste simplement une chaîne pour voir si c'est un GUID, je ne veux pas vraiment créer un objet Guid dont je n'ai pas besoin. Alors...

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

Et voici comment vous l'utilisez:

string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
4
Doug Clutter

Sur la base de la réponse acceptée, j'ai créé une méthode d'extension comme suit:

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

Où "MagicNumbers.defaultGuid" est simplement "un vide" tout zéro Guid "00000000-0000-0000-0000-000000000000".

Dans mon cas, renvoyer cette valeur à la suite d'une conversion ToGuid non valide n'était pas un problème.

2
a4bike

voir http://en.wikipedia.org/wiki/Globally_unique_identifier

Il n'y a aucune garantie qu'un alpha sera réellement là.

1
Ross

Renverra le Guid s'il est valide, sinon il renverra Guid.Empty

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