我需要知道给定的字符串是否是有效的 DateTime 格式字符串,因为该字符串可能表示其他内容。我试过 DateTime.ParseExact(somedate.ToString(format), format) 认为它会因无效格式而呕吐,但事实并非如此。
所以我很擅长简单地测试字符串是否仅包含“yYmMdDsShH”字符。像 std::string.find_first_not_of 这样的东西可以工作,但 System.String 没有这个。
我认为 RegEx 可能会解决问题,但我对正则表达式非常无能。
请注意,Linq 不适用于此版本(仅限 .NET 2.0)。
已更新
为了澄清,我需要知道给定的字符串是否代表日期时间格式,而不是像这样的其他东西:
if (input == "some special value")
... // it's a special case value
else if (Environment.GetEnvironmentVariable(input))
... // it's an environment variable name
else if (IsDateTimeFormatString(input))
... // it's a date time format string
else if (input.IndexOfAny(Path.GetInvalidPathChars()) < 0)
... // it's a file path
else
throw new Exception(); // Not a valid input
我可以将 DateTime 格式字符串限制为仅“yYmMdDsShH”,或者我也可以在其中添加一些分隔符,允许或不允许什么由我决定。
最佳答案
对于 .NET2,您需要对此进行自己的检查。例如,以下方法使用 foreach 进行检查:
bool FormatValid(string format)
{
string allowableLetters = "yYmMdDsShH";
foreach(char c in format)
{
// This is using String.Contains for .NET 2 compat.,
// hence the requirement for ToString()
if (!allowableLetters.Contains(c.ToString()))
return false;
}
return true;
}
如果您可以选择使用 .NET 3.5 和 LINQ,则可以使用 Enumerable.Contains直接使用字符,Enumerable.All .这会将上面的内容简化为:
bool valid = format.All(c => "yYmMdDsShH".Contains(c));
关于c# - 字符串只包含一组给定的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293295/