Cách xác thực GUID là GUID


Câu trả lời:



9

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))
{
...
}

5
cập nhật cho năm 2018return Guid.TryParse(value, out var _);
waitforit 15/09/2018

7

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.


6

Không có gì đảm bảo rằng một GUID chứa các ký tự alpha. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFFlà một GUID hợp lệ 00000000-0000-0000-0000-000000000000và 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;
    }
}

2

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 đề.


2
Tại sao sử dụng MagicNumbers thay vì Guid.Empty?
mattumotu


1

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;
}

1

if (MyGuid! = Guild.Empty)

{

// Guild hợp lệ

}

khác {

// Bang hội không hợp lệ

}


0

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

Cần biết rằng câu hỏi được tạo cho ngôn ngữ C # và câu trả lời được cung cấp là trong VB.Net. Sẽ rất vui nếu ánh xạ nó cho C #.
Pimenta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.