如何确定一个字符串是 GUID 还是仅由数字组成,GUID 是否一定包含至少一个字母字符?
bool isValid = Guid.TryParse(inputString, out var tempGuid);
或 bool isValid = Guid.TryParse(inputString, out _);
。 - xadriel这是一个相对简洁,现代化的C#方法,它禁止了out变量的使用:
var 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,如果成功则返回 true,否则返回 false。 - rethabile@"^(\{{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
和00000000-0000-0000-0000-000000000000
都是有效的GUID。
如果你正在使用.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;
}
}
if(MyGuid != Guid.Empty)
{
// Valid Guid
}
else
{
// Invalid Guid
}
根据被接受的答案,我创建了以下扩展方法:
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转换的结果返回并不是一个问题。
如果Guid是有效的,它将返回Guid,否则将返回Guid.Empty
if (!Guid.TryParse(yourGuidString, out yourGuid)){
yourGuid= Guid.Empty;
}
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