Pregunta

que tengo en la configuración del archivo una fila de todos los tipos de archivos que desea permitir:

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

Quiero tener al lado de la FileUpload controlar un RegularExpressionValidator que sólo permite que estos archivos.

Estoy manejando en caso pageLoad establecer la propiedad ValidationExpression del validador de expresiones regulares.

he intentado:

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

Pero es entre mayúsculas y minúsculas. Mi único problema ahora es que sea insensible.

¿Fue útil?

Solución

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

Otros consejos

Si apaga validion lado del cliente y sólo utiliza la validación del lado del servidor, hay un caso insensitivte soporte .NET operatior (? I) que se puede utilizar. Si quieres somethign que funciona tanto en el lado del cliente y el servidor es posible que tenga que recurrir a algo como

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

para cada una de las extensiones de archivo. No incluir el código para cada uno de sus extensiones, debe ser bastante fácil extrapolar el patrón

Respuesta:

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

Lo que significa que:

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

Esto debería ser un medio muy eficaz para la validación de archivos con una lista dinámica cambiante

Para su información, lo hice con este constructor de expresiones regulares en línea, una increíble herramienta gratuita!

La expresión regular funciona bien con la RegularExpressionValidator en el lado del servidor. El problema surge cuando se trata de hacer la validación del cliente, lo que falla porque el sabor de expresiones regulares javascript no sabe cómo manejar "? I" (mayúsculas y minúsculas se logra en javascript expresiones regulares con "i"). Puede resolver este problema mediante la adición de este script a sus páginas. Creo que el guión es bastante sencillo.

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

Si usted está haciendo esto en el servidor de validación con .NET, se puede 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top