アップロードされたファイルの名前を含む文字列をサニタイズしようとしています。これを行っているのは、ファイルがWebからダウンロードされ、さらに名前を正規化するためです。これは私がこれまでに持っているものです:
private String pattern = "[^0-9_a-zA-Z\\(\\)\\%\\-\\.]";
//Class methods & stuff
private String sanitizeFileName(String badFileName) {
StringBuffer cleanFileName = new StringBuffer();
Pattern filePattern = Pattern.compile(pattern);
Matcher fileMatcher = filePattern.matcher(badFileName);
boolean match = fileMatcher.find();
while(match) {
fileMatcher.appendReplacement(cleanFileName, "");
match = fileMatcher.find();
}
return cleanFileName.substring(0, cleanFileName.length() > 250 ? 250 : cleanFileName.length());
}
これは問題なく動作しますが、奇妙な理由でファイルの拡張子が消去されます。つまり、「p%Z _-...#!$()=¡¿&+。jpg」は「p%Z _-...()」になります。
正規表現をどのように調整する必要があるかについてのアイデアはありますか?