Java/android-检查字符串“FileName”是否包含任何不允许使用的文件名字符
我检查字符串Java/android-检查字符串“FileName”是否包含任何不允许使用的文件名字符,java,android,regex,filenames,Java,Android,Regex,Filenames,我检查字符串文件名是否可以安全保存,方法是检查它是否有任何带有正则表达式的奇怪字符。它将是一个.json文件,并且应该在文件名中允许空格 public static boolean fileNameIsSafe(String nameIncExt) { Matcher m = Pattern.compile("regex?").matcher(nameIncExt); return m.matches(); } 正则表达式是什么?我感觉您从未访问过此网站
文件名
是否可以安全保存,方法是检查它是否有任何带有正则表达式的奇怪字符。它将是一个.json文件,并且应该在文件名中允许空格
public static boolean fileNameIsSafe(String nameIncExt) {
Matcher m = Pattern.compile("regex?").matcher(nameIncExt);
return m.matches();
}
正则表达式是什么?我感觉您从未访问过此网站:
无论如何,您可以在字符类中匹配字符:
[/\]\[;”]
可能有一个更优雅的解决方案-我不是正则表达式专家,但这个怎么样:
[.]*\w[\w| |.]*
细分:
[.]*
文件名可以以0或更多“.”开头
\w
然后至少需要一个单词字符,可以是a-z、a-z、0-9或z。这将防止文件名为“…”或文件名以空格开头,或仅包含“.”和空格
[\w| |.]*
剩余的文件名可以有0个或多个单词字符、空格和/或“.”。我假设您可以删除尾随空格
注意:在Java中,您需要避开反斜杠,因此它看起来是这样的:
boolean isSafeFilename = Pattern.matches("[.]*\\w[\\w| |.]*", stringToTest);
我们可以看到一些示例数据:正确和不正确的输入吗?你的正则表达式尝试也不错。请定义“奇怪的字符”。我会用这个词来指我姐姐的前男友。John Smith.json诸如此类的东西。奇怪的字符如/][;”等,在文件名中是不允许的。我似乎找不到我在该网站上寻找的内容,你说的字符类是什么意思?
[此文本在字符类中]
并且它将只匹配以下任何字符一次:acdehilnrstx
那么您如何使用它从文件名中删除“/?%*:\“/?!@$^&{}`~[],”,并返回一个“安全”字符串,或者在isSafe()中返回false。