I’m trying to make a form for uploading images. I’ve placed a RegularExpressionValidator to check the extension of the selected file.
Its ValidationExpression is :
(?i:^.+(.jpg|.ttf|.png|.gif)$)
But when i select an .exe file for example. The page does a postback and then shows me the error. And the .exe file is stored where it shouldn’t.
Here’s my HTML code for the control:
<%@ Page Title="" Language="C#" MasterPageFile="~/filippo_admin_page/admin_master.Master" AutoEventWireup="true" CodeBehind="a_gallery.aspx.cs" Inherits="photography.filippo_admin_page.a_gallery" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link rel="Stylesheet" type="text/css" href="css/a_gallery.css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<div id="whole_wrapper">
<fieldset>
<legend>Insert new image:</legend>
<div id="controls_wrapper">
<ul>
<li>
<asp:Label AssociatedControlID="title_txt" runat="server" ID="title_lbl">Title:</asp:Label>
<asp:TextBox ID="title_txt" runat="server" placeholder="Image title"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="title_txt" ErrorMessage="RequiredFieldValidator"
ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
</li>
<li>
<asp:Label AssociatedControlID="desc_txt" runat="server" ID="desc_lbl">Description:</asp:Label>
<asp:TextBox ID="desc_txt" runat="server" placeholder="Image description" TextMode="MultiLine"></asp:TextBox>
</li>
<li>
<asp:Label AssociatedControlID="cat_txt" runat="server" ID="cat_lbl">Category:</asp:Label>
<asp:TextBox ID="cat_txt" runat="server" placeholder="Image category"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="cat_txt" ErrorMessage="RequiredFieldValidator"
ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
</li>
<li>
<asp:Label ID="upload_lbl" runat="server">Select Image:</asp:Label>
<asp:FileUpload ID="upload_pnl" runat="server" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="upload_pnl" ErrorMessage="RequiredFieldValidator"
ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="upload_pnl" ErrorMessage="RegularExpressionValidator"
ForeColor="Red" ValidationExpression="(?i:^.+(.jpg|.ttf|.png|.gif)$)"
ValidationGroup="gallery_validation">File must be an image.</asp:RegularExpressionValidator>
</li>
<li>
<asp:Button ID="clear" runat="server" Text="Clear" UseSubmitBehavior="False" />
<asp:Button ID="submit" runat="server" Text="Upload" onclick="submit_Click"
ValidationGroup="gallery_validation"/>
</li>
</ul>
</div>
<asp:Label ID="msg_lbl" Visible="false" runat="server"></asp:Label>
</fieldset>
</div>
</asp:Content>
Here’s the part of the validator:
<li>
<asp:Label ID="upload_lbl" runat="server">Select Image:</asp:Label>
<asp:FileUpload ID="upload_pnl" runat="server" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="upload_pnl" ErrorMessage="RequiredFieldValidator"
ForeColor="Red" ValidationGroup="gallery_validation">Required!</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="upload_pnl" ErrorMessage="RegularExpressionValidator"
ForeColor="Red" ValidationExpression="(?i:^.+(.jpg|.ttf|.png|.gif)$)"
ValidationGroup="gallery_validation">File must be an image.</asp:RegularExpressionValidator>
</li>
I have ValidationGroup equals gallery_validation and is set on all controls that i want to validate, including the submit button it self.
If you want the whole HTML code for the file just ask.
Your regex is invalid, it cannot be processed properly on the client. My IE9 shows error when I use the same regex. If I switch it to a standard regex expression, everything works properly. So, it is necessary to change the regex. I will post it here shortly.
The problematic part here is – ?i: which is a part of the .NET Framework. So, it does not work on the client side. For more details, please refer to the
make regular expression validator case insensitive?
This link contains also a solution to the problem.