Cara memvalidasi GUID adalah GUID

Jawaban:

172

Lihat apakah ini membantu: -

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

Deepesh
sumber
4
.NET 4.0: Tautan kedua ... lain, tautan pertama. +1
Khepri
C # 7.0 gunakan var atau Guid atau _ untuk variabel inline out bool isValid = Guid.TryParse(inputString, out var tempGuid);ataubool isValid = Guid.TryParse(inputString, out _);
xadriel
9

Saat saya hanya menguji string untuk melihat apakah itu GUID, saya tidak benar-benar ingin membuat objek Guid yang tidak saya perlukan. Begitu...

public static class GuidEx
{
    public static bool IsGuid(string value)
    {
        Guid x;
        return Guid.TryParse(value, out x);
    }
}

Dan inilah cara Anda menggunakannya:

string testMe = "not a guid";
if (GuidEx.IsGuid(testMe))
{
...
}
Doug Clutter
sumber
6
pembaruan untuk 2018return Guid.TryParse(value, out var _);
tunggu
7

GUID adalah angka 16-byte (128-bit), biasanya diwakili oleh string heksadesimal 32 karakter. GUID (dalam bentuk hex) tidak perlu mengandung karakter alfa, meskipun secara kebetulan itu mungkin. Jika Anda menargetkan GUID dalam bentuk hex, Anda dapat memeriksa bahwa string tersebut memiliki panjang 32 karakter (setelah menghilangkan tanda hubung dan tanda kurung kurawal) dan hanya memiliki huruf AF dan angka.

Ada gaya penyajian GUID tertentu (penempatan tanda hubung) dan ekspresi reguler dapat digunakan untuk memeriksanya, misalnya,

@"^(\{{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})$"

dari http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm . Yang mengatakan, harus ditekankan bahwa GUID benar-benar merupakan angka 128-bit dan dapat direpresentasikan dalam beberapa cara berbeda.

tofutim
sumber
6

Tidak ada jaminan bahwa GUID berisi karakter alfa. FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFFadalah GUID yang valid 00000000-0000-0000-0000-000000000000dan apa pun di antaranya.

Jika Anda menggunakan .NET 4.0, Anda dapat menggunakan jawaban di atas untuk Guid.Parse dan Guid.TryParse. Jika tidak, Anda dapat melakukan sesuatu seperti ini:

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;
    }
}
Bisa Gencer
sumber
2

Berdasarkan jawaban yang diterima, saya membuat metode Ekstensi sebagai berikut:

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

Di mana "MagicNumbers.defaultGuid" hanyalah "kosong" semua Panduan nol "00000000-0000-0000-0000-000000000000".

Dalam kasus saya, mengembalikan nilai itu sebagai hasil dari konversi ToGuid yang tidak valid bukanlah masalah.

a4bike
sumber
2
Mengapa menggunakan MagicNumbers daripada Guid.Empty?
mattumotu
1

Akan mengembalikan Guid jika itu adalah Guid yang valid, kalau tidak itu akan mengembalikan Guid.Empty

if (!Guid.TryParse(yourGuidString, out yourGuid)){
          yourGuid= Guid.Empty;
}
Gila
sumber
1

jika (MyGuid! = Guild.Empty)

{

// Guild yang valid

}

lain {

// Guild tidak valid

}

Sameer Bahad
sumber
0

Gunakan fungsionalitas standar konstruktor 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
xjfw34
sumber
Ketahuilah bahwa pertanyaan itu dibuat untuk bahasa C # dan jawaban yang diberikan ada di VB.Net. Akan menyenangkan untuk memetakannya untuk C #.
Pimenta