我有这样的扩展方法;
public static bool IsBoolean(this string value)
{
string lower = value.ToLower(CultureInfo.InvariantCulture);
return new Regex("[true]|[false]|[0]|[1]", RegexOptions.Compiled).IsMatch(lower);
}
但是当我将“fals”或“tru”作为值时,这种正则表达式模式会失败。如;
[Theory(DisplayName = "IsBoolean")]
[InlineData("FALS")]
[InlineData("Fals")]
[InlineData("TRU")]
[InlineData("Tru")]
public void IsNotBoolean(string value)
{
bool result = value.IsBoolean();
Assert.False(result);
}
所有这些测试都失败了。因为结果是真的 这怎么可能?这种正则表达式模式是错误的吗?
答案 0 :(得分:2)
您想要检查字符串是否是以下任何一种,忽略大小写,
true
false
1
0
然后,您只需将这些字符串与|
分开,并将其用作正则表达式,并使用IgnoreCase
选项:
public static bool IsBoolean(this string value) {
// note the ^ and $. They assert the start and end of the string.
return new Regex("^(?:true|false|0|1)$", RegexOptions.IgnoreCase).IsMatch(value);
}
[]
表示一个字符类,因此它将匹配其中的任何一个字符。 [abc]
匹配 a
,b
或c
。注意区别。