Як перевірити GUID - це GUID


Відповіді:



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

5
оновлення за 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 #.
Пімента
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.