Как проверить GUID - это GUID


Ответы:


172

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

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: вторая ссылка ... иначе первая ссылка. +1
Хепри

C # 7.0 использует var или Guid или _ для встроенных переменных bool isValid = Guid.TryParse(inputString, out var tempGuid);илиbool isValid = Guid.TryParse(inputString, out _);
xadriel

9

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

6
обновление на 2018 годreturn Guid.TryParse(value, out var _);
waitforit

7

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


6

Нет гарантии, что 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;
    }
}

2

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

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


2
Зачем использовать MagicNumbers вместо Guid.Empty?
mattumotu


1

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

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


0

Использовать стандартные функции конструктора 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

Имейте в виду, что вопрос был задан для языка C #, а ответ предоставлен на VB.Net. Было бы неплохо сопоставить это для C #.
Pimenta
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.