Как определить, содержит ли строка 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
bool isValid = Guid.TryParse(inputString, out var tempGuid);
илиbool isValid = Guid.TryParse(inputString, out _);
Когда я просто проверяю строку, чтобы узнать, является ли она идентификатором 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))
{
...
}
return Guid.TryParse(value, out var _);
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-битным числом и может быть представлен различными способами.
Нет гарантии, что 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
Нет никакой гарантии, что альфа действительно будет там.
if (MyGuid! = Guild.Empty)
{
// Действительная гильдия
}
else {
// Неверная гильдия
}
Использовать стандартные функции конструктора 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