我在用 Java 过滤文件名时遇到了很多问题。我正在使用 PrimeFaces fileUpload 标签,我需要允许上传仅包含字母数字字符后跟扩展名(例如“.txt”)的文件。具体来说,扩展名前必须包含A-Z、a-z、0-9中的一个或多个,不能有空格等字符,后跟扩展名“.txt”,即必须有一个,而且只有一个“。”在名称中,并且必须在扩展名的开头。
到目前为止,所有过滤名称的尝试都没有成功,如果我排除 .
,那么它也会从扩展名中排除。文件名的类型应为:abcXYZ123.txt
、aaaccc001.txt
等,而不是ab.cd.txt
等。
我已经尝试了/[A-Za-z0-9]+\\.txt$/
、/[^\\W_]+\\.txt$的各种组合/
、/[\\p{Alnum}]\\.txt$/
等,但它们要么允许一些无效名称,要么排除一些有效名称。
一些帮助将不胜感激。
最佳答案
我认为您在结尾处使用 $
是正确的。我会在开始时将其与插入符 ^
匹配以获取
^[A-Za-z0-9]+\\.txt$
正如 $
表示“行的结尾”,^
表示“行的开头”。
Testing this使用正则表达式^[A-Za-z0-9]+\.txt$
,我得到:
匹配
a.txt
abcXYZ123.txt
aaccc001.txt
没有匹配项
a.b.c.txt
ab.cd.txt
.txt
作为旁注,根据您的 Regex 实现,alnum 可能等于也可能不等于 [A-Za-z0-9]
– 它可能包含来自其他编号系统的数字(例如六,中文是六)。
关于java - 过滤文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603396/