3

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

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

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

一些帮助将不胜感激。

4

1 回答 1

1

我认为你在最后的正确轨道上$。我会在开始时将它与插入符号匹配^以获得

^[A-Za-z0-9]+\\.txt$

正如$“行尾”的意思一样,也意味着“行^的开始”。

使用 regex对此进行测试^[A-Za-z0-9]+\.txt$,我得到:

火柴

  • a.txt
  • abcXYZ123.txt
  • aaccc001.txt

无匹配

  • a.b.c.txt
  • ab.cd.txt
  • .txt

附带说明一下,根据您的正则表达式实现,alnum 可能等于也可能不等于[A-Za-z0-9]——它可能包含来自其他编号系统的数字(例如六,在中文中是六)。

于 2013-03-24T20:13:26.467 回答