正则表达式,字符串只包含Java中的字母,数字和空格

时间:2011-02-14 06:18:25

标签: java regex string

要求:字符串应仅包含字母,数字和空格              我必须将一个干净的名称传递给另一个API。

实施:Java

我想出了这个要求

public static String getCleanFilename(String filename) {
    if (filename == null) {
        return null;
    }
    return filename.replaceAll("[^A-Za-z0-9 ]","");
}

这适用于我的一些测试用例,但我想知道我是否缺少任何边界条件,或者更好的方法(性能)。

2 个答案:

答案 0 :(得分:2)

评论的补充:我不认为在采用用户输入的情况下性能是一个问题(文件名不应该那么长......)。

但是关于你的问题:你可以通过在正则表达式中添加额外的+来减少替换次数:

[^A-Za-z0-9 ]+

答案 1 :(得分:1)

要回答您的直接问题,\t会失败您的方法并以“空格”方式传递。切换到\s[...\s],你很好。

无论如何,您的设计可能存在缺陷。不要随意用户输入,让用户知道你不允许的内容并制作修正手册。

修改
如果文件名无关紧要,请使用文件名的SHA-2哈希并使用它。保证满足您的要求。