Как проверить GUID является GUID - PullRequest
64 голосов
/ 02 июня 2011

Как определить, содержит ли строка GUID, а не просто строку чисел.

будет ли GUID всегда содержать хотя бы 1 буквенный символ?

Ответы [ 7 ]

110 голосов
/ 02 июня 2011

Посмотрите, поможет ли это: -

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

7 голосов
/ 02 июня 2011

Нет гарантии, что 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;
    }
}
5 голосов
/ 02 июня 2011

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-битнымчисло и могут быть представлены различными способами.

3 голосов
/ 12 мая 2016

Когда я просто тестирую строку, чтобы определить, является ли она 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))
{
...
}
2 голосов
/ 19 марта 2016

На основании принятого ответа я создал метод Расширения следующим образом:

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 не было проблемой.

1 голос
/ 16 декабря 2014

Вернет Guid, если это действительный Guid, иначе он вернет Guid.Empty

if (!Guid.TryParse(yourGuidString, out yourGuid)){
          yourGuid= Guid.Empty;
}
1 голос
/ 02 июня 2011

см. http://en.wikipedia.org/wiki/Globally_unique_identifier

Нет никакой гарантии, что альфа действительно будет там.

...