Java 在primefaces中使用AllowType的regex可选

Java 在primefaces中使用AllowType的regex可选,java,regex,primefaces,Java,Regex,Primefaces,这是我的正则表达式,在本地java中,它可以工作,但当我试图将它放在p:fileUpload allowTypes上时,它不工作 我的目标是 1) “itrs”或“itrs”是必须的 2) “-draft”或“-draft”是可选的 3) “.csv”或“.csv”是必须的 我希望尽可能多地过滤文件名和文件扩展名 这是我的本地版本:(itrs-itrs)((-draft-draft)?)(\.\\/)(csv-csv)$您可以使用 allowTypes="/^(?:itrs|ITRS)(?:-d

这是我的正则表达式,在本地java中,它可以工作,但当我试图将它放在p:fileUpload allowTypes上时,它不工作

我的目标是 1) “itrs”或“itrs”是必须的 2) “-draft”或“-draft”是可选的 3) “.csv”或“.csv”是必须的

我希望尽可能多地过滤文件名和文件扩展名

这是我的本地版本:(itrs-itrs)((-draft-draft)?)(\.\\/)(csv-csv)$

您可以使用

allowTypes="/^(?:itrs|ITRS)(?:-draft|-DRAFT)?\.(?:csv|CSV)$/"
或者,如果
dRaFt
ItRS
也被接受,您可以使用
i
不区分大小写的修饰符稍微缩短模式:

allowTypes="/^itrs(?:-draft)?\.csv$/i"
请注意此处使用的
/
正则表达式分隔符。另外,请参见说明正则表达式分隔符使用的示例


注意:如果确实需要在
csv
之前匹配
/
,请将
\.
替换为
[.\/]

基本上,您需要在regex分隔符中使用regex模式。见下面我的答案。在您的要求中,您没有提到在
csv
之前可以有
/
,因此我不在主正则表达式中使用它,但我在底部添加了一个注释。您好,Wiktor,如果您同意,请您在此详细解释正则表达式中发生了什么?包括为什么我必须注意“/”的用法事先谢谢Wiktor@Applegate这是你的正则表达式,我只是补充了一下
i
不区分大小写(正如我已经写过的)<代码>(?:…)是(仅用于对模式进行分组,不用于保存和保留子匹配)。