gpt4 book ai didi

c# - 字符串只包含一组给定的字符

转载 作者:IT王子 更新时间:2023-10-29 04:36:16 25 4
gpt4 key购买 nike

我需要知道给定的字符串是否是有效的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com