我想限制少数文件类型格式并允许所有其他文件类型在正则表达式验证表达式中。我尝试的是指定一些允许和一些受限制的文件类型,但我想指定受限制的文件类型并允许上传所有其他类型。
我正在使用带有 asp.net 文件上传控制的正则表达式。我的正则表达式现在看起来像这样
^.*\.(csv|xlsx|xls|doc|docx|pdf|txt|zip|(?!exe)|(?!bat)|(?!msi))$
它工作正常并限制 exe bat 和 msi 但我想允许所有其他文件格式
我想限制少数文件类型格式并允许所有其他文件类型在正则表达式验证表达式中。我尝试的是指定一些允许和一些受限制的文件类型,但我想指定受限制的文件类型并允许上传所有其他类型。
我正在使用带有 asp.net 文件上传控制的正则表达式。我的正则表达式现在看起来像这样
^.*\.(csv|xlsx|xls|doc|docx|pdf|txt|zip|(?!exe)|(?!bat)|(?!msi))$
它工作正常并限制 exe bat 和 msi 但我想允许所有其他文件格式
使用否定的向后看:
/^.*(?<!\.(exe|bat|msi))$/i
您使用的负前瞻对您没有帮助。完全没有。它们是微不足道的,因为您试图在字符串的末尾匹配它们,并且环视不会消耗任何东西,因此字符串中的最后一个位置不能有 exe 或 bat 。
为了后代,一步一步的解释:
^
匹配字符串的开头,我相信你知道。
.*
消耗整个字符串。
(?<! ... )
回头看看,确保我们没有消费......
\.
一个字面点,后跟...
(exe|bat|msi)
我们的任何禁止文件类型。
$
然后匹配字符串的结尾。
我还选择让它不区分大小写。
编辑,对于 js:
/^(?:(?!\.(exe|bat|msi)$).)*/i
Moar不同的解释:
^
字符串顶部
(
开始组
.
任意字符
(?!...)
负前瞻。不跟随:
\.
字面点。
(exe|bat|msi)
禁止的文件类型。
$
字符串结束
)*
关闭组并匹配任意次数。