Cách xác định xem một chuỗi có chứa GUID hay chỉ là một chuỗi số.
GUID sẽ luôn chứa ít nhất 1 ký tự alpha?
Câu trả lời:
Hãy xem những điều này có giúp ích gì không: -
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
Khi tôi chỉ kiểm tra một chuỗi để xem nó có phải là GUID hay không, tôi thực sự không muốn tạo một đối tượng Guid mà tôi không cần. Vì thế...
public static class GuidEx
{
public static bool IsGuid(string value)
{
Guid x;
return Guid.TryParse(value, out x);
}
}
Và đây là cách bạn sử dụng nó:
string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
return Guid.TryParse(value, out var _);
GUID là một số 16 byte (128 bit), thường được biểu diễn bằng một chuỗi thập lục phân 32 ký tự. Một GUID (ở dạng hex) không cần phải chứa bất kỳ ký tự alpha nào, mặc dù có thể nó sẽ xảy ra. Nếu bạn đang nhắm mục tiêu một GUID ở dạng hex, bạn có thể kiểm tra xem chuỗi dài 32 ký tự (sau khi loại bỏ dấu gạch ngang và dấu ngoặc nhọn) và chỉ có các chữ cái AF và số.
Có một số kiểu trình bày GUID (vị trí dấu gạch ngang) và các biểu thức chính quy có thể được sử dụng để kiểm tra điều này, ví dụ:
@"^(\{{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})$"
từ http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . Điều đó nói rằng, cần nhấn mạnh rằng GUID thực sự là một số 128 bit và có thể được biểu diễn theo một số cách khác nhau.
Không có gì đảm bảo rằng một GUID chứa các ký tự alpha. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
là một GUID hợp lệ 00000000-0000-0000-0000-000000000000
và bất kỳ thứ gì ở giữa.
Nếu bạn đang sử dụng .NET 4.0, bạn có thể sử dụng câu trả lời ở trên cho Guid.Parse và Guid.TryParse. Nếu không, bạn có thể làm như sau:
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;
}
}
Dựa trên câu trả lời được chấp nhận, tôi đã tạo một Phương thức mở rộng như sau:
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;
}
Trong đó "MagicNumbers.defaultGuid" chỉ là "trống" tất cả bằng không Hướng dẫn "00000000-0000-0000-0000-000000000000".
Trong trường hợp của tôi, việc trả lại giá trị đó do chuyển đổi ToGuid không hợp lệ không phải là vấn đề.
xem http://en.wikipedia.org/wiki/Globally_unique_identifier
Không có gì đảm bảo rằng một alpha sẽ thực sự ở đó.
Sẽ trả lại Hướng dẫn nếu nó là Hướng dẫn hợp lệ, nếu không nó sẽ trả lại Hướng dẫn.
if (!Guid.TryParse(yourGuidString, out yourGuid)){
yourGuid= Guid.Empty;
}
if (MyGuid! = Guild.Empty)
{
// Guild hợp lệ
}
khác {
// Bang hội không hợp lệ
}
Sử dụng chức năng tiêu chuẩn của hàm tạo 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