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

标签 c# regex

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

相关文章:

Java正则表达式双反斜杠转义特殊字符

regex - 使用正则表达式删除每行的最后一个字符

regex - 引用-此正则表达式是什么意思?

c# - WPF Avalon 向导绑定(bind)问题

c# - 在网络场场景中工作时,我可以使用什么作为通用 session ID?

c# - System.Threading.Timer 和 CA1823 :AvoidUnusedPrivateFields

ruby-on-rails - 如何使用保留字的字边界否定正则表达式中的单词

java - 使用 Java 进行源代码检测

c# - 解决播放WAV文件时出现问题

javascript - 如何在 ASP.NET WebForm 上通过 jQuery $.get() 方法访问 URL?