有没有办法检查字符串是否不等于多个不同的字符串?

时间:2011-10-10 08:50:01

标签: c# .net string validation string-comparison

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

有没有办法在不循环每种类型的情况下执行此操作?

8 个答案:

答案 0 :(得分:28)

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

// 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))
{
    ...
}

这确实会循环所有的值 - 但对于小型集合,这不应该太昂贵。对于 large 字符串集合,您需要使用类似HashSet<string>的内容,这样可以提供更高效的查找。

答案 1 :(得分:5)

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

但内部某种程度上仍然会循环

答案 2 :(得分:3)

将扩展名粘贴在一个集合中,然后检查文件的扩展名是否在该集合中。

答案 3 :(得分:3)

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

来完成

即:

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完成,但我不是正则表达式,所以我会把它留给另一张海报:)

答案 4 :(得分:2)

使用以下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
   }

答案 5 :(得分:1)

StackOverflow已经有了答案。 HERE 但我建议你采取构建扩展列表的路径,然后再检查每一个扩展。正则表达式会比这更昂贵,内部也会大致相同。

答案 6 :(得分:0)

正则表达式。

    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('.'));

答案 7 :(得分:0)

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

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

    default:
      return false;
  }
}