Pergunta

Eu tenho nas configurações de apresentar uma linha de todos os tipos de arquivos eu quero permitir que:

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

Eu quero ter ao lado do FileUpload controlar um RegularExpressionValidator que permite que apenas esses arquivos.

Eu estou lidando com isso na definição da propriedade ValidationExpression do validador regex evento PageLoad.

i tentou:

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

Mas é sensível a maiúsculas. O meu único problema agora é torná-lo insensível.

Foi útil?

Solução

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

Outras dicas

Se você desligar validion lado do cliente e só usar validação do lado do servidor, há um caso de suporte .NET insensitivte operatior (? I) que pode ser usado. Se você quiser somethign que trabalha lado cliente e servidor pode ser necessário recorrer a algo como

[Jj] [PP] [Ee] [Gg]

para cada uma das extensões de arquivo. não incluir o código para cada uma das suas extensões, deve ser muito fácil extrapolar o padrão

Resposta:

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

O que significa:

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

Esta deve ser uma maneira muito eficiente para validar os arquivos contra uma lista mutável dinâmica

FYI, eu fiz isso com este on-line construtor regex, uma ferramenta gratuita incrível!

O regex funciona bem com o RegularExpressionValidator no lado do servidor. O problema levanta-se quando se tenta fazer a validação do cliente, que falha porque o sabor javascript regex não sabe como lidar com "? I" (insensibilidade caso é alcançado em regex javascript com "i"). Você pode resolver esse problema adicionando este script às suas páginas. Eu acho que o roteiro é bastante simples.

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

Se você está fazendo isso do lado do servidor de validação com NET, você pode usar algo como

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")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top