Jak ustalić, czy ciąg zawiera identyfikator GUID, czy tylko ciąg liczb.
czy identyfikator GUID zawsze będzie zawierał co najmniej 1 znak alfa?
Odpowiedzi:
Sprawdź, czy te informacje pomogą: -
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);
lubbool isValid = Guid.TryParse(inputString, out _);
Kiedy tylko testuję ciąg, aby sprawdzić, czy jest to identyfikator GUID, tak naprawdę nie chcę tworzyć obiektu Guid, którego nie potrzebuję. Więc...
public static class GuidEx
{
public static bool IsGuid(string value)
{
Guid x;
return Guid.TryParse(value, out x);
}
}
A oto jak tego używasz:
string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
return Guid.TryParse(value, out var _);
Identyfikator GUID to 16-bajtowa (128-bitowa) liczba, zwykle reprezentowana przez 32-znakowy ciąg szesnastkowy. GUID (w postaci szesnastkowej) nie musi zawierać żadnych znaków alfanumerycznych, chociaż przypadkowo prawdopodobnie tak. Jeśli celujesz w identyfikator GUID w postaci szesnastkowej, możesz sprawdzić, czy ciąg ma 32 znaki (po usunięciu myślników i nawiasów klamrowych) i zawiera tylko litery AF i cyfry.
Istnieje pewien styl prezentacji identyfikatorów GUID (umieszczanie myślników) i można to sprawdzić za pomocą wyrażeń regularnych, np.
@"^(\{{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})$"
z http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . To powiedziawszy, należy podkreślić, że identyfikator GUID jest naprawdę 128-bitową liczbą i może być reprezentowany na wiele różnych sposobów.
Nie ma gwarancji, że identyfikator GUID zawiera znaki alfabetu. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
jest prawidłowym identyfikatorem GUID, więc jest 00000000-0000-0000-0000-000000000000
i wszystko pomiędzy.
Jeśli używasz .NET 4.0, możesz użyć powyższej odpowiedzi dla Guid.Parse i Guid.TryParse. W przeciwnym razie możesz zrobić coś takiego:
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;
}
}
Na podstawie zaakceptowanej odpowiedzi utworzyłem następującą metodę rozszerzenia:
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;
}
Gdzie „MagicNumbers.defaultGuid” to po prostu „pusty” zero Guid „00000000-0000-0000-0000-000000000000”.
W moim przypadku zwrócenie tej wartości w wyniku nieprawidłowej konwersji ToGuid nie było problemem.
zobacz http://en.wikipedia.org/wiki/Globally_unique_identifier
Nie ma gwarancji, że alfa rzeczywiście tam będzie.
if (MyGuid! = Guild.Empty)
{
// Prawidłowa gildia
}
else {
// Nieprawidłowa gildia
}
Użyj standardowych funkcji konstruktora 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