过滤文件名

时间:2013-03-24 20:07:41

标签: java regex filenames

我在Java中过滤文件名时遇到很多问题。我正在使用PrimeFaces fileUpload标记,我需要允许可以上传的文件,如果它们只包含字母数字字符后跟扩展名,例如“.txt”。具体来说,在扩展名之前,名称必须包含AZ,az或0-9中的一个或多个,没有空格或其他字符,后跟扩展名“.txt”,即必须有一个,只有一个“”在名称中,并且必须在扩展名的开头。

到目前为止,所有过滤名称的尝试都没有成功,如果我排除.,那么它也会被排除在扩展名之外。文件名应为:abcXYZ123.txtaaaccc001.txt等类型,但不是ab.cd.txt等。

我尝试了/[A-Za-z0-9]+\\.txt$//[^\\W_]+\\.txt$//[\\p{Alnum}]\\.txt$/等的各种组合,但要么允许一些无效的名称,要么排除一些无效的名称。

非常感谢一些帮助。

1 个答案:

答案 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] - 它可能包含来自其他编号系统的数字(例如六,中文为六)。