有没有一种方法来检查一个字符串是否不等于多个不同的字符串

本文关键字:字符串 是否 不等于 检查 一种 方法 有没有 一个 | 更新日期: 2023-09-27 18:10:46

我想通过文件扩展名验证文件上传器。如果文件扩展名不等于。jpg、。jpeg、。gif、。png、。bmp,则抛出验证错误。

有没有一种方法可以在不遍历每个类型的情况下做到这一点?

有没有一种方法来检查一个字符串是否不等于多个不同的字符串

构建一个集合——如果它很小,几乎任何集合都可以:

// Build the collection once (you may want a static readonly variable, for
// example).
List<string> list = new List<string> { ".jpg", ".jpeg", ".gif", ".bmp", ... };
// Later
if (list.Contains(extension))
{
    ...
}

当然会循环遍历所有的值——但是对于小型集合来说,这样做的代价不应该太大。对于大的字符串集合,您可能希望使用HashSet<string>之类的东西,它将提供更有效的查找。

您可以使用!Regex.IsMatch(extension, "^'.(jpg|jpeg|gif|png|bmp)$")

但是在内部它仍然会循环

将扩展名放在集合中,然后检查文件的扩展名是否在该集合中

它需要一个循环,但是你可以使用LINQ(隐藏循环)

ie:

using System.Linq;
private readonly string[] _matches = new[] { ".jpg", ".bmp", ".png", ".gif", ".bmp" };    
// Assumes extension is in the format ".jpg", "bmp", so trim the
// whitespace from start and end
public bool IsMatch(string extension)
{
     return _matches.Contains(extension);
}

也可以用Regex来完成,但我不是Regex专家,所以我把它留给另一个海报:)

使用以下2个扩展名。我在CodeProject上写过一篇文章。给你:http://www.codeproject.com/KB/dotnet/MBGExtensionsLibrary.aspx

        public static bool In<T>(this T t, IEnumerable<T> enumerable)
        {
            foreach (T item in enumerable)
            {
                if (item.Equals(t))
                { return true; }
            }
            return false;
        }
        public static bool In<T>(this T t, params T[] items)
        {
            foreach (T item in items)
            {
                if (item.Equals(t))
                { return true; }
            }
            return false;
        }

当然,它仍然需要一个循环,但好的是你不需要做那个工作。这也意味着您不必编写这样的代码:

if (myString == "val1" ||
   myString == "val2" ||
   myString == "val3" ||
   myString == "val4" ||
   myString == "val5")
   {
      //Do something
   }

在StackOverflow上已经有了答案。在这里但我建议您采用构建扩展列表的方式,然后逐一检查。Regex的开销会比这个高,并且在内部也会做大致相同的事情。

正则表达式。

    string fx = "jpg";
    if (!Regex.IsMatch(fx, "^'.?(jpg|jpeg|gif|png|bmp)$", RegexOptions.IgnoreCase))
    {
    }

还可以使用

获取文件扩展名。
string fn= file.FileName;
if (fn.Contains("''")) 
    fn= fn.Substring(fn.LastIndexOf("''") + 1);
string fx = fn.Substring(0, fn.LastIndexOf('.'));

您可以使用switch语句来验证文件扩展名:

protected bool IsValidExtension(string extension)
{
  switch (extension.ToLower())
  {
    case ".jpg":
    case ".jpeg":
    case ".gif":
    case ".png":
    case ".bmp":
      return true;
    default:
      return false;
  }
}