正则表达式验证文件名

时间:2012-04-25 21:41:03

标签: java regex file

我需要在这样的方法中验证a。

    validateFileName(Editable s) {
        String filtered_str = s.toString();
        if (filtered_str.matches(".*[regexp].*")) {
            filtered_str = filtered_str.replaceAll("[regxp]", "");
            s.clear();
            s.append(filtered_str);}

我应该使用哪个regexp来排除所有非法字符和空格?我正在使用linux

2 个答案:

答案 0 :(得分:10)

如果您使用的是兼容POSIX的操作系统,则文件名中的合法字符为a-z,A-Z,0-9,句点,下划线和连字符。因此匹配“非法”字符的正则表达式将是

[^-_.A-Za-z0-9]

附录:如果您想要一个完全可移植的文件名,那就是这样。正如我在下面的Josip评论中所纠正的那样,POSIX本身实际上允许更多的角色。

答案 1 :(得分:4)

如果你的想法只是排除ilegal和space char,你可以使用类似的东西:

'^[^*&%\s]+$'

你可以添加任何" ilegal" char进入字符列表(在这种情况下,它忽略*,&,%和空格)\s是空格! ^内的[]是正则表达式语法的一部分,意思是:匹配[]内的任何字符。