【发布时间】:2011-06-02 06:02:11
【问题描述】:
如何确定字符串是否包含 GUID 而不是仅包含数字字符串。
GUID 是否始终包含至少 1 个字母字符?
【问题讨论】:
如何确定字符串是否包含 GUID 而不是仅包含数字字符串。
GUID 是否始终包含至少 1 个字母字符?
【问题讨论】:
【讨论】:
bool isValid = Guid.TryParse(inputString, out var tempGuid); 或 bool isValid = Guid.TryParse(inputString, out _);
当我只是测试一个字符串以查看它是否是一个 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))
{
...
}
【讨论】:
return Guid.TryParse(value, out var _);
GUID 是一个 16 字节(128 位)的数字,通常由 32 个字符的十六进制字符串表示。 GUID(十六进制形式)不需要包含任何字母字符,尽管它很可能会包含。如果您的目标是十六进制形式的 GUID,您可以检查该字符串是否为 32 个字符长(去掉破折号和大括号后)并且只有字母 A-F 和数字。
有一定的 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 位的数字,可以用多种不同的方式表示。
【讨论】:
不保证 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;
}
}
【讨论】:
根据接受的答案,我创建了一个扩展方法,如下所示:
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 转换无效而返回该值不是问题。
【讨论】:
if(MyGuid != Guid.Empty)
{
// Valid Guid
}
else
{
// Invalid Guid
}
【讨论】:
见http://en.wikipedia.org/wiki/Globally_unique_identifier
无法保证 Alpha 版确实存在。
【讨论】:
如果 Guid 是有效的 Guid,则返回 Guid,否则返回 Guid.Empty
if (!Guid.TryParse(yourGuidString, out yourGuid)){
yourGuid= Guid.Empty;
}
【讨论】:
使用 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# 方法,可以抑制 out 变量:
var isValid = Guid.TryParse(inputString, out _);
【讨论】: