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