正则表达式的字符串包含在Java中只有字母,数字和空间
问题描述:
要求:字符串应该只包含字母,数字和空格。
我必须将一个干净的名称传递给另一个API。正则表达式的字符串包含在Java中只有字母,数字和空间
实现:Java的
我想出了这个对我的要求
public static String getCleanFilename(String filename) { if (filename == null) { return null; } return filename.replaceAll("[^A-Za-z0-9 ]",""); }
这非常适用于一些我的测试用例,但想知道我失去了任何边界条件,或者没有更好的办法(在表演中)去做。
答
要回答你直接的问题,\t
失败,你的方法和通过“空间”。切换到\s
([...\s]
,你是好。
在任何情况下,您的设计可能是有缺陷的,而是与用户输入任意dicking,让用户知道你不允许然后改正手册。
编辑:
如果文件名也没关系,把文件名的SHA-2哈希和使用保证满足您的要求
答
附加注释:我不认为该性能是在采取用户输入(并且文件名不应该)的情况下的问题那么久......)。
但关于你的问题:你可以通过在你的正则表达式增加一个额外的+减少更换次数:
[^A-Za-z0-9 ]+
如果你是** **验证的文件名,你不应该* *修改**。 – BoltClock 2011-02-14 06:21:04
那么你想用什么`____“`。 – 2011-02-14 06:21:58
这几乎肯定会让用户流失。只需检测消极情况,让用户知道他们可以做什么,不能进入。 – 2011-02-14 06:23:17