【问题标题】:How to restrict some file types and allow all others in Regular expression Asp.net如何在正则表达式 Asp.net 中限制某些文件类型并允许所有其他文件类型
【发布时间】:2012-09-07 18:41:41
【问题描述】:

我想限制少数文件类型格式并允许所有其他的正则表达式验证表达式。我尝试的是指定一些允许和一些受限制的文件类型,但我想指定受限制的文件类型并允许上传所有其他类型。

我正在使用带有 asp.net 文件上传控制的正则表达式。我的正则表达式现在看起来像这样

^.*\.(csv|xlsx|xls|doc|docx|pdf|txt|zip|(?!exe)|(?!bat)|(?!msi))$

它工作正常并限制 exe bat 和 msi,但我想允许所有其他文件格式

【问题讨论】:

  • 为什么要使用正则表达式?你为什么不简单地使用一个string[] 的允许扩展?
  • 在我的应用程序中,我使用 asp.net 验证,所以为了保持一致性,我也想在这里使用 asp.net 正则表达式
  • 您可以使用CustomValidator 编写此检查。只需处理服务器验证以检查扩展名并返回 e.args=true; 如果没问题。

标签: asp.net regex file-upload


【解决方案1】:

使用消极的向后看:

/^.*(?<!\.(exe|bat|msi))$/i

您使用的负前瞻对您没有帮助。完全没有。它们是微不足道的,因为您试图在字符串的末尾匹配它们,并且环视不会消耗任何东西,因此字符串中的最后一个位置后面不能有 exe 或 bat。

为了后人,一步一步的解释:

^

匹配字符串的开头,我相信你知道。

.*

消耗整个字符串。

(?<! ... )

回头看看,确保我们没有消费......

\.

文字点,后跟...

(exe|bat|msi)

任何我们禁止的文件类型。

$

然后匹配字符串的结尾。

我还选择了不区分大小写。

编辑,对于 js:

/^(?:(?!\.(exe|bat|msi)$).)*/i

摩尔不同的解释:

^

字符串顶部

(

开始组

.

任意字符

(?!...)

负前瞻。后面没有:

\.

文字点。

(exe|bat|msi)

禁止的文件类型。

$

字符串结束

)*

关闭组并匹配任意次数。

【讨论】:

  • 当我尝试这个时,它在 RegularExpressionValidatorEvaluateIsValid 函数中给了我一些 javascript 错误
  • 那是因为javascript不支持lookbehinds。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多