检查一个字符串上的多个包含
本文关键字:包含 字符串 一个 检查 | 更新日期: 2023-09-27 18:32:52
所以我有一个条件,目前看起来像这样......
if (input.Contains(",") || input.Contains("/") || input.Contains(@"'") || input.Contains("."))
我需要添加更多要检查的字符,并且想知道是否有更精简的语法来完成同样的事情? 类似于SQL的IN运算符?
if ( input IN (",", "/", @"'", ....etc ) )
有人知道在不添加大量代码的情况下完成此操作的任何很酷的技巧吗?
考虑使用正则表达式(指定要在括号中检查的字符 - 请记住,其中一些必须进行转义):
Regex.IsMatch(input, @"[,/]");
或
new[] {",", "/"}.Any(input.Contains)
这个怎么样?
if(input.IndexOfAny(new char[] { ',', '/', '''', '.' })>=0)
{
}
这是最短的赢吗?
@".,/'".Any(input.Contains)
"asdfasdf".ContainsAny(".","/","4");
public static bool ContainsAny(this string stringToCheck, params string[] parameters)
{
return parameters.Any(parameter => stringToCheck.Contains(parameter));
}
If (input.IndexOfAny(new char[] { ',', '/', '''', '.' }) >= 0) {
...
}
或
If (input.IndexOfAny(@",/'.".ToCharArray()) >= 0) {
...
}
你可以使用一些Linq:
if ( ",/''.".ToCharArray().Any( c => input.Contains( c ) ) )
你可以使用 String.IndexOfAny -- 它将扫描数组中一组字符中的任何一个:
if (e.Label.IndexOfAny(new char[]{',', '/', @''', '.' /* other chars here */}) > -1)
扩展方法可以使事情看起来很干净。 请看以下内容。
public static bool ContainsChar(this string input, params char[] characters)
{
foreach (var character in characters)
{
if (input.Contains(character))
{
return true;
}
}
return false;
}
该方法的参数是可变的,因此您可以添加任意数量的字符,以逗号分隔。 如果不习惯使用扩展方法,请修改为以下内容:
public static bool ContainsChar(string input, params char[] characters)
{
foreach (var character in characters)
{
if (input.Contains(character))
{
return true;
}
}
return false;
}
示例用法如下:
string myString = "this is my string";
//extension
if (myString.ContainsChar('.', '*', '%')) //do something
//static method
if (ContainsChar(myString, '.', '*', '%')) //do something