วิธีตรวจสอบ GUID คือ GUID


100

วิธีตรวจสอบว่าสตริงมี GUID เทียบกับสตริงตัวเลขหรือไม่

GUID จะมีอักขระอัลฟ่าอย่างน้อย 1 ตัวเสมอหรือไม่


คำตอบ:


172

ดูว่าสิ่งเหล่านี้ช่วยได้หรือไม่: -

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


4
.NET 4.0: ลิงค์ที่สอง ... อื่นลิงค์แรก +1
Khepri

C # 7.0 ใช้ var หรือ Guid หรือ _ สำหรับตัวแปรอินไลน์เอาต์bool isValid = Guid.TryParse(inputString, out var tempGuid);หรือbool isValid = Guid.TryParse(inputString, out _);
xadriel

9

เมื่อฉันแค่ทดสอบสตริงเพื่อดูว่าเป็น 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))
{
...
}

6
อัปเดตสำหรับปี 2018return Guid.TryParse(value, out var _);
waitforit

7

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 บิตและสามารถแสดงได้หลายวิธี


6

ไม่มีการรับประกันว่า 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;
    }
}

2

จากคำตอบที่ยอมรับฉันได้สร้างวิธีการขยายดังนี้:

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 ที่ไม่ถูกต้องไม่ใช่ปัญหา


2
เหตุใดจึงใช้ MagicNumbers กับ Guid.Empty
mattumotu




0

ใช้ฟังก์ชันมาตรฐานตัวสร้าง 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 # และคำตอบที่ให้ไว้อยู่ใน VB.Net จะดีกว่าถ้าจะแมปสำหรับ C #
Pimenta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.