Подтвердить что ты не робот

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

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

будет ли GUID всегда содержать как минимум 1 альфа-символ?

4b9b3361

Ответ 2

GUID - это 16-байтовое (128-разрядное) число, обычно представляемое шестнадцатеричной строкой из 32 символов. GUID (в шестнадцатеричной форме) не должен содержать никаких альфа-символов, хотя, вероятно, это возможно. Если вы нацеливаете GUID в шестнадцатеричной форме, вы можете проверить, что строка длиной 32 символа (после удаления тире и фигурных скобок) и имеет только буквы A-F и номера.

Существует определенный стиль представления GUID (dash-placement), и регулярные выражения могут использоваться для проверки этого, например,

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

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

Ответ 4

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

вы также можете использовать регулярное выражение, посмотреть на этот сайт и выполнить поиск guid. http://regexlib.com