Як визначити, чи рядок містить 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, я не дуже хочу створювати об’єкт 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)
{
// Дійсна гільдія
}
ще {
// Недійсна гільдія
}
Використовуйте стандартну функціональність конструктора 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