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

问题描述:

要求:字符串应该只包含字母,数字和空格。
我必须将一个干净的名称传递给另一个API。正则表达式的字符串包含在Java中只有字母,数字和空间

实现:Java的

我想出了这个对我的要求

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

这非常适用于一些我的测试用例,但想知道我失去了任何边界条件,或者没有更好的办法(在表演中)去做。

+2

如果你是** **验证的文件名,你不应该* *修改**。 – BoltClock 2011-02-14 06:21:04

+0

那么你想用什么`____“`。 – 2011-02-14 06:21:58

+0

这几乎肯定会让用户流失。只需检测消极情况,让用户知道他们可以做什么,不能进入。 – 2011-02-14 06:23:17

要回答你直接的问题,\t失败,你的方法和通过“空间”。切换到\s[...\s],你是好。

在任何情况下,您的设计可能是有缺陷的,而是与用户输入任意dicking,让用户知道你不允许然后改正手册。

编辑:
如果文件名也没关系,把文件名的SHA-2哈希和使用保证满足您的要求

附加注释:我不认为该性能是在采取用户输入(并且文件名不应该)的情况下的问题那么久......)。

但关于你的问题:你可以通过在你的正则表达式增加一个额外的+减少更换次数:

[^A-Za-z0-9 ]+