java - 过滤文件名

标签 java regex filenames

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

到目前为止,所有过滤名称的尝试都没有成功,如果我排除 .,那么它也会从扩展名中排除。文件名的类型应为:abcXYZ123.txtaaaccc001.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/

相关文章:

java - 为什么从 Android 应用程序访问数据库不安全?

java - 使用 GenericDAO 插入第二个数据源时出错

java - 为什么我在尝试使用库中的类时收到 "Cannot resolve symbol"?

删除字符串中的所有 "H",除了包括 "CH"的那些

python - 处理(迭代)多个 (HDF5) 文件以及每个 HDF 文件中的多个节点

JAVA:文件:/tmp/guest-u9uIBd/Schreibtisch/Untitled.jar!/ressources/db_config.conf(未找到文件)

javascript - 如何在正则表达式中表达包含命名组的列表?

ASP.NET 密码强度正则表达式

windows - 有没有工具可以在 Windows 上将 UTF-8 文件名批量转换回 ISO-8859-1?

linux - 如何从提到的列表中获取文件名