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

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

我想有旁的FileUpload控制的RegularExpressionValidator,只允许这些文件。

我在事件pageLoad的设定正则表达式验证程序的ValidationExpression属性处理它。

我尝试:

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

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

有帮助吗?

解决方案

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 +")$";
    }
}

其他提示

如果您关闭客户端validion并且只使用服务器端验证,有一个.NET支持案例insensitivte算子(?i)该都可以使用。如果你想somethign,工程客户端和服务器端,您可能需要采取类似

[JJ] [PP] [EE] [千兆克]

为每个文件扩展名。不包括为每个扩展的代码,应该很容易推断模式

答案:

^.*\.(?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);

这应该是一个非常有效的方式来验证的文件对一个动态可变的列表

仅供参考,我与这个的在线正则表达式生成器,一个惊人的免费工具!

在正则表达式正常工作与在服务器侧的的RegularExpressionValidator。当它试图做客户端验证,因为JavaScript的正则表达式的味道不知道如何处理这些故障问题上升“?我”(不区分大小写以JavaScript正则表达式用“我”来实现)。您可以通过添加这个脚本到您的网页解决这个问题。我觉得剧本相当直接。

   <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>

如果你这样做验证服务器端使用.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")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top