Comprobar si una cadena es un GUID

- 2 minute read

Los GUIDs (Globally Unique Identifier) son un tipo especial de identificador y se escriben normalmente como una secuencia de dígitos hexadecimales separados en cinco bloques mediante guiones «-». Si tenemos la necesidad de saber si una cadena de texto tiene el formato de un GUID podemos realizar la comprobación de varias maneras, pero la más eficiente es mediante el uso de expresiones regulares.

En el siguiente ejemplo podemos ver como se realiza la comprobación mediante el método IsMatch de la clase RegEx. Si la cadena no es nula y coincide con el patrón de un GUID, el método IsGuid devuelve True; en caso contrario devuelve False. He añadido los caracteres «^» y «$» al patrón para indicar que toda la cadena, y no sólo una parte de ella, debe cumplir la expresión regular. Por último, al constructor se le pasa el parámetro RegexOptions.IgnoreCase para indicar que no se debe distinguir entre mayúsculas y minúsculas.

Imports System.Text.RegularExpressions

Class Program 

    Private Shared Sub Main() 
        Dim guid As String = 95cd9c38-cedd-4f11-8105-5a4d100f2472 
        Dim noguid As String = no guid

        Console.WriteLine("Is Guid: {0} - {1}", guid, IsGuid(guid))
        Console.WriteLine("Is Guid: {0} - {1}", noguid, IsGuid(noguid))
        Console.ReadKey()
    End Sub
    
    Public Shared Function IsGuid(ByVal exp As String) As Boolean
        If exp IsNot Nothing Then
            Dim GuidRegEx As New Regex("^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",RegexOptions.IgnoreCase)
            Return GuidRegEx.IsMatch(exp)
        Else
            Return False
        End If
    End Function 
End Class

y en C#:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string guid = "95cd9c38-cedd-4f11-8105-5a4d100f2472";
        string noguid = "no guid";

        Console.WriteLine("Is Guid: {0} - {1}", guid, IsGuid(guid));
        Console.WriteLine("Is Guid: {0} - {1}", noguid, IsGuid(noguid));
        Console.ReadKey();
    }

    static public bool IsGuid(string exp)
    {
        if (exp != null)
        {
            Regex GuidRegEx = new Regex(@"^\[0-9A-F\]{8}-\[0-9A-F\]{4}-\[0-9A-F\]{4}-\[0-9A-F\]{4}-\[0-9A-F\]{12}$", RegexOptions.IgnoreCase);
            return GuidRegEx.IsMatch(exp);
        }
        else
        {
            return false;
        }
    }
}