Как определить, содержит ли строка GUID, а не только строку чисел.
будет ли GUID всегда содержать как минимум 1 альфа-символ?
Как определить, содержит ли строка GUID, а не только строку чисел.
будет ли GUID всегда содержать как минимум 1 альфа-символ?
Смотрите, если это поможет: -
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
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-битным числом и может быть представлен несколькими различными способами.
Нет никакой гарантии, что 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;
}
}
На основе принятого ответа я создал метод расширения следующим образом:
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 не было проблемой.
см. http://en.wikipedia.org/wiki/Globally_unique_identifier
Нет гарантии, что на самом деле будет альфа.
Вернет Guid, если он действителен Guid, иначе он вернет Guid.Empty
if (!Guid.TryParse(yourGuidString, out yourGuid)){
yourGuid= Guid.Empty;
}
Когда я просто тестирую строку, чтобы узнать, является ли это 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))
{
...
}
вы также можете использовать регулярное выражение, посмотреть на этот сайт и выполнить поиск guid. http://regexlib.com