Java如何使用正则判断文件名是否合法

之前遇到传入的URI不合法,导致Android crash的问题,所以需要在传入之前判断一些文件名是否合法,不合法的话需要根据mimetype重新生成一个随机文件名。 

主要的方法如下:

正则表达式大同小异,也可以用于其他语言对于合法文件名的判断。

1、只能包含英文字符,开始和结束不允许有空格。

2、不能存在两个点号。

    public static void main(String[] args) {
        System.out.println(isFileNameValid("text.pdf"));
        System.out.println(isFileNameValid("text..txt"));
        System.out.println(isFileNameValid("text tes.txt"));
        System.out.println(isFileNameValid("text text .txt"));
        System.out.println(isFileNameValid(" t ext.txt"));
        System.out.println(isFileNameValid("text.txt."));
        System.out.println(isFileNameValid("text.123.454"));
        System.out.println(isFileNameValid("text_/123.454"));
    }
    private static boolean isFileNameValid(String name){
        if (name == null || name.length() > 255){
            return false;
        } else {
            return name.matches("^[a-zA-Z0-9](?:[a-zA-Z0-9 ._-]*[a-zA-Z0-9])?\\.[a-zA-Z0-9_-]+$");
        }
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在大多数操作系统中,文件名合法需要满足以下规则: 1. 仅包含字母、数字、下划线和连字符(即横线或减号); 2. 不能以点号开头; 3. 不能包含特殊字符,如空格、斜杠、反斜杠、冒号、星号等; 4. 文件名长度不能超过操作系统所允许的最大长度。 因此,可以使用以下正则表达式来匹配合法文件名: ``` ^[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9]+)?$ ``` 解释一下这个正则表达式: - `^` 表示匹配字符串的开头; - `[a-zA-Z0-9_-]+` 表示匹配至少一个字母、数字、下划线或连字符; - `(?:\.[a-zA-Z0-9]+)?` 表示可选的文件扩展名,即一个点号后面跟着至少一个字母或数字; - `$` 表示匹配字符串的结尾。 使用这个正则表达式可以有效地判断一个字符串是否合法文件名。 ### 回答2: 正则表达式可以用来验证文件名合法性。一个合法文件名通常包含字母、数字、下划线和连字符,并且长度可能有限制。根据具体需求,正则表达式可以灵活地匹配不同的文件名形式。 以下是一个示例的正则表达式验证文件名合法性: ^[a-zA-Z0-9_-]{1,30}\.\w+$ 解释: - ^ 表示字符串的起始位置 - [a-zA-Z0-9_-] 表示允许的字符范围为字母(大小写)、数字、下划线和连字符 - {1,30} 表示限制文件名的长度为 1 到 30 个字符 - \. 表示一个点,用来分隔文件名和扩展名 - \w+ 表示允许的扩展名为一个或多个字母、数字或下划线字符 - $ 表示字符串的结束位置 根据上述正则表达式,以下是一些合法文件名示例: - myfile.txt - file-123.jpg - document_2021.pdf 而以下是一些不合法文件名示例: - file*name.txt (包含非法字符 *) - .hiddenfile (文件名不能为空) - verylongfilename1234567891011121314151617181920.docx (超过长度限制) 我们可以通过使用正则表达式使用编程语言中的相关函数进行文件名验证。这样可以保证文件名合法性,确保代码的可靠性和安全性。 ### 回答3: 正则表达式可以用来判断文件名是否合法文件名合法性通常要满足以下条件:不包含非法字符,长度不超过一定限制,与系统保留字无冲突,并且符合特定的命名约定。 首先,文件名不能包含非法字符。在Windows系统中,文件名中不能包含下列字符之一:\ / : * ? " < > |。在Unix/Linux系统中,文件名中不能包含 / 或者 NUL 字符(ASCII 0)。可以使用正则表达式来排除这些非法字符,例如可以使用 [\w\s\-\.] 来表示合法字符,其中 \w 表示任何字母、数字、下划线,\s 表示空格,\- 表示减号,\. 表示点号。 其次,文件名的长度一般是有限制的。不同操作系统对文件名的长度限制不同。Windows 系统中,文件名长度通常不超过255个字符。使用正则表达式可以通过 \{0,255\} 来表示文件名长度不超过255个字符。 然后,文件名不能与系统保留字冲突。不同操作系统有不同的保留字列表,文件名不能与这些保留字相同或相似。例如在Windows系统中,文件名不能与以下保留字相同:CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9. 使用正则表达式可以通过 [(?!CON|PRN|AUX|NUL|COM\d|LPT\d|\.\w{3})\w]+ 来排除这些保留字。 最后,文件名还需要符合特定的命名约定,例如只能包含字母、数字、下划线等字符,或者需要以特定的前缀或后缀开头或结尾等。使用正则表达式可以根据具体的命名约定来判断文件名合法性。 综上所述,正则表达式可以很好地判断文件名合法性,通过排除非法字符、限制长度、避免与系统保留字冲突,并符合特定的命名约定,来确定是否一个文件名合法的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值