0

我在设置文件中有一行我想要允许的所有文件类型:

jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls

我想在 FileUpload 控件旁边有一个仅允许这些文件的 RegularExpressionValidator。

我在设置正则表达式验证器的 ValidationExpression 属性的 PageLoad 事件中处理它。

我试过:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "jpeg|jpg|tiff"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}

但它区分大小写。我现在唯一的问题是让它不敏感。

4

5 回答 5

0
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "([jJ][pP][eE][gG])|([jJ][pP][gG])|([tT][iI][fF][fF])"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}
于 2009-07-28T18:21:38.143 回答
0

如果您关闭客户端验证并仅使用服务器端验证,则可以使用 .NET 支持不区分大小写的运算符 (?i)。如果你想要一些适用于客户端和服务器端的东西,你可能需要求助于类似的东西

[Jj][Pp][Ee][Gg]

对于每个文件扩展名。没有包含每个扩展的代码,应该很容易推断出模式

于 2009-07-28T18:25:40.460 回答
0

回答:

^.*\.(?i-s:pdf|exe)$

意思是:

ValidationExpression = @"^.*\.(?i-s:pdf|exe)$"; //will match pdf PDF exe EXE

string regex = "jpeg|jpg|tiff|tif|png|gif|bmp|eps";
ValidationExpression = @"^.*\.(?i-s:file_types)$".Replace("file_types", regex);

这应该是根据动态可变列表验证文件的一种非常有效的方法

仅供参考,我使用这个在线正则表达式生成器,一个了不起的免费工具!

于 2009-07-28T18:26:00.023 回答
0

正则表达式与服务器端的 RegularExpressionValidator 一起工作得很好。当它尝试进行客户端验证时,问题就出现了,因为 javascript regex 风格不知道如何处理“?i”(在带有“i”的 javascript regex 中实现了不区分大小写),所以失败了。您可以通过将此脚本添加到您的页面来解决此问题。我认为脚本非常简单。

   <script type="text/javascript" language="javascript"> 
        function RegularExpressionValidatorEvaluateIsValid(val) 
        { 
          var value = ValidatorGetValue(val.controltovalidate); 
          if (ValidatorTrim(value).length == 0) 
            return true; 

          var regex = null; 
          if(val.validationexpression.indexOf("(?i)")>=0) 
          { 
             regex = new RegExp(val.validationexpression.replace("(?i)",""),"i"); 
          } 
          else 
          { 
             regex = new RegExp(val.validationexpression); 
          } 

          var matches = regex.exec(value);

          return (matches != null && value == matches[0]); 
        } 
   </script>
于 2009-07-29T09:30:24.990 回答
0

如果您使用 .NET 在服务器端进行此验证,则可以使用类似

VB:

    Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase)
    re.IsMatch("image.jpg")

C#:

    var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
    re.IsMatch("image.jpg")
于 2009-10-07T15:11:28.427 回答