Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 验证asp:RegularExpressionValidator上载文件名时出现问题_Asp.net_Regex_File Upload_Case Insensitive_File Type - Fatal编程技术网

Asp.net 验证asp:RegularExpressionValidator上载文件名时出现问题

Asp.net 验证asp:RegularExpressionValidator上载文件名时出现问题,asp.net,regex,file-upload,case-insensitive,file-type,Asp.net,Regex,File Upload,Case Insensitive,File Type,设置文件中有一行我希望允许的所有文件类型: 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 sen

设置文件中有一行我希望允许的所有文件类型:

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 +")$";
    }
}
但它是区分大小写的。
我现在唯一的问题是使其不敏感。

如果关闭客户端validion并仅使用服务器端验证,则可以使用.NET support case insensitive Operator?i。如果您想让客户端和服务器端都能工作,您可能需要求助于

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 +")$";
    }
}
[Jj][Pp][Ee][Gg]

对于每个文件扩展名。没有包含每个扩展的代码,应该很容易推断模式

答案:

^.*\.(?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);
这应该是根据动态可变列表验证文件的一种非常有效的方法


仅供参考,我是通过在线regex builder制作的,这是一个了不起的免费工具

正则表达式可以与服务器端的RegularExpressionValidator配合使用。当它尝试执行客户端验证时,问题就出现了,这失败了,因为javascript正则表达式风格不知道如何处理?i大小写不敏感是在javascript正则表达式中通过i实现的。您可以通过将此脚本添加到页面来解决此问题。我觉得剧本很直白

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

C:


哎哟我只是测试了一下,但是没有!哎哟它是有效的正则表达式,但在asp:RegularExpressionValidator中不起作用!有没有办法使这个控件的正则表达式不区分大小写?yuo能解释一下这两个选项之间的区别吗?不区分大小写的操作符-i?是特定于.NET的运算符,不是标准正则表达式语法的一部分。客户端验证器使用JavaScipt,因此该操作符不能在客户端工作。如果您同意只使用服务器端验证,则禁用客户端验证并使用运算符。第二个选项相当于说,对于每个扩展名,大写字母或小写字母j后跟大写字母或小写字母p后跟大写字母或小写字母e后跟大写字母或小写字母g,括号[]定义了一个字符集。括号中没有任何JS大小写。操作人员我不打算使用[Jj]etc.yes-/I-但由于语法不同于.NET等效语法,您需要为validator控件选择客户端或服务器端验证。如果两者都需要,则可能需要使用自定义验证器。我正在寻找一种使用ASP.NET RegularExpressionValidator控件进行验证的方法。
    Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase)
    re.IsMatch("image.jpg")
    var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
    re.IsMatch("image.jpg")