您当前的位置: 首页 >  ui

寒冰屋

暂无认证

  • 2浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

寒冰屋 发布时间:2021-11-07 20:37:46 ,浏览量:2

咨询区
  • 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,居然有四种方法,挺好,学习了。

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0431s