使用RegularExpressionValidator验证ASP.NET FileUpload控件中的文件类型时出现问题

时间:2009-06-03 02:39:30

标签: asp.net regex validation file-upload

代码:

<span>Upload Adobe Acrobat file<img src="../../Images/UI/pdf.jpg" style="height: 25;
    width: 20" height="25" width="20" /></span>
<asp:FileUpload ID="uplPdf" runat="server" />
<asp:RegularExpressionValidator ID="valPdf" runat="server" ErrorMessage="Only PDF files are allowed!"
    ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$" Display="Dynamic"
    ControlToValidate="uplPdf" ValidationGroup="upload" />
<br />
<asp:Button ID="btnUpload" runat="server" Text="Upload files" OnClick="btnUpload_Click"
    ValidationGroup="upload" />
代码背后的代码:

if (valPdf.IsValid && uplPdf.HasFile)

在输入有效的pdf文件名后,IsValid返回false。 请注意,如果未指定文件,则返回true。

4 个答案:

答案 0 :(得分:2)

在RegularExpressionValidator中尝试此操作

<asp:RegularExpressionValidator ID="valPdf" runat="server" 
  ErrorMessage="Only PDF files are allowed!" 
  ValidationExpression=".+.(P|p)(D|d)(F|f)$" 
   Display="Dynamic" ControlToValidate="uplPdf" ValidationGroup="upload" />

然后在您的代码隐藏中,在继续之前调用Page.Validate("upload")

Page.Validate("upload");
if(valPdf.IsValid && uplPdf.HasFile)
{
   //Proceed with the upload
}

注意:上面的ValidationExpression将以大小写的方式匹配任何以* .pdf结尾的文件。因此,"c:\somepath\somefile.pdF""somefile.pDF""somefile.Pdf"都将通过验证。

答案 1 :(得分:0)

嗯......我不认为这个正则表达式在这种情况下会起作用。试试这个:

ValidationExpression = “^。+。PDF $”

它适用于以.pdf结尾的文件,这就是你想要的。

答案 2 :(得分:0)

嗯,是的,通常你不得不逃避这一点。

此外,在问题中使用了POSIX正则表达式函数,而通常我们在.NET中使用Perl样式表达式

你有没有试过像:

\.pdf$

当然要确保它忽略了字母的情况。

答案 3 :(得分:0)

我将文件列表添加到项目设置中的字符串集合中。

然后我以编程方式设置正则表达式:

public static string PrepareValidExtensionRegex(string[] allowedFileTypes)
{
    for (int i = 0; i < allowedFileTypes.Length; i++)
    {
        char[] chars = allowedFileTypes[i].ToCharArray();
        int length = chars.Length;
        string[] ret = new string[length];
        for (int j = 0; j < length; j++)
        {
            char ch = chars[j];
            char replacement = char.IsLower(ch)?
                               char.ToUpper(ch): 
                               char.ToLower(ch);
            ret[j] = "[" + ch + replacement + ']';
        }
        allowedFileTypes[i] = '(' + string.Join("", ret) + ')';
    }

    return @"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(" + 
        string.Join("|", allowedFileTypes) + ")$";
}

//Usage:
string[] allowedFiles = new string[] { "jpg", "gif" };
RegexValidator.ValidationExpression = PrepareValidationExpression(allowedFiles);