我在Java中过滤文件名时遇到很多问题。我正在使用PrimeFaces fileUpload标记,我需要允许可以上传的文件,如果它们只包含字母数字字符后跟扩展名,例如“.txt”。具体来说,在扩展名之前,名称必须包含AZ,az或0-9中的一个或多个,没有空格或其他字符,后跟扩展名“.txt”,即必须有一个,只有一个“”在名称中,并且必须在扩展名的开头。
到目前为止,所有过滤名称的尝试都没有成功,如果我排除.
,那么它也会被排除在扩展名之外。文件名应为:abcXYZ123.txt
,aaaccc001.txt
等类型,但不是ab.cd.txt
等。
我尝试了/[A-Za-z0-9]+\\.txt$/
,/[^\\W_]+\\.txt$/
,/[\\p{Alnum}]\\.txt$/
等的各种组合,但要么允许一些无效的名称,要么排除一些无效的名称。
非常感谢一些帮助。
答案 0 :(得分:1)
我认为你最终会跟$
走在正确的轨道上。我会在开始时将其与插入符^
匹配
^[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]
- 它可能包含来自其他编号系统的数字(例如六,中文为六)。