问题描述
我正在使用Primefaces 8 fileUpload组件,并且我需要禁用某些文件扩展名并允许其他操作,因此我尝试使用以下正则表达式
allowTypes="/^[^.]+$|\.(?!(aspx|exe|jsp|xhtml|js|msi|msc|xml|bat|cmd|sh|bash)$)([^.]+$)/i"
并且我在正则表达式网站上对其进行了测试,并且效果很好:
但是当我尝试将其应用于fileUpload组件时,它无法正常工作,并且我可以上传上述文件而没有任何问题。
解决方法
如果您不想捕获下次使用带有扩展名文件的组,请使用以下命令:
^[^.]*$|^.*\.(?!(?:aspx|exe|jsp|xhtml|js|msi|msc|xml|bat|cmd|sh|bash)$)[^.]*$
否则使用这个:
^[^.]*$|^.*\.(?!(?:aspx|exe|jsp|xhtml|js|msi|msc|xml|bat|cmd|sh|bash)$)([^.]*)$
使用此语法,任何不以所列扩展名结尾的文件都将被接受其完整长度,即使是长度为 0 的文件。
如果文件必须至少包含一个字符,请使用:
^[^.]+$|^.*\.(?!(?:aspx|exe|jsp|xhtml|js|msi|msc|xml|bat|cmd|sh|bash)$)([^.]*)$
要调试这些解决方案,请使用 https://regex101.com/