如何验证某个 string 是否为合法的 GUID ?

咨询区

  • 001

假如有一个string字符串,请问如何判断它是合法的GUID还是一个普通的数字型字符串, 是否可以用包含 字母 进行区分?

回答区

  • Can Gencer

判断是否有 字母 的方式是不靠谱的,比如说:FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF 它是一个有效的 GUID,而 00000000-0000-0000-0000-000000000000 也是一个有效的GUID。

其实可以通过 Guid.Parse 或者 Guid.TryParse 来强制转换,参考如下代码:

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

如果你用的是 .NET 4.0 之前的版本,可以用 构造函数 的方式进行判断,比如下面这样:

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

  • tofutim

GUID 是一个 16byte 长度的数字,但通常都是用 32 个16进制字符表示,所以你看到的 GUID 不一定包含字母,只不过那么大一串你大概率会遇到而已。

换句话说,比如你的 GUID 是16进制表示的,那你可以简单的判断这个string的length是否为32差不多就可以了,如果严谨一点的话,可以使用正则。

public static bool IsGUID(string expression)
{
    if (expression != null)
    {
        Regex guidRegEx = new Regex(@"^(\{
   
   {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})$");

        return guidRegEx.IsMatch(expression);
    }
    return false;
}

点评区

判断一个string是否为合法的 GUID,居然有四种方法,挺好,学习了。

Guess you like

Origin blog.csdn.net/mzl87/article/details/121156065