我正在检查字符串filename
是否安全保存,方法是检查它是否有任何带有正则表达式的奇怪字符。它将是一个 .json 文件,并且还应在文件名中允许空格。
public static boolean fileNameIsSafe(String nameIncExt) {
Matcher m = Pattern.compile("regex?").matcher(nameIncExt);
return m.matches();
}
正则表达式是什么?
可能有一个更优雅的解决方案 - 我不是正则表达式专家,但这个怎么样:
[.]*w[w| |.]*
分解一下:
[.]*
文件名可以以 0 或多个"." 开头s
w
然后,您至少需要一个单词字符,可以是 a-z、A-Z、0-9 或 _。 这可以防止文件名为"..."或以空格开头或仅包含"."s 和空格。
[w| |.]*
其余文件名可以包含 0 个或多个单词字符、空格和/或"."我假设您可以修剪尾随空格。
请注意,在 Java 中,您需要转义反斜杠,因此它看起来像这样:
boolean isSafeFilename = Pattern.matches("[.]*\w[\w| |.]*", stringToTest);
我感觉你从来没有访问过这个网站: 正则表达式
无论如何,您可以匹配字符类中的字符:[/][;']