2

アップロードされたファイルの名前を含む文字列をサニタイズしようとしています。これを行っているのは、ファイルが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 _-...()」になります。

正規表現をどのように調整する必要があるかについてのアイデアはありますか?

4

2 に答える 2

4

ループの最後にMatcher#appendTailが必要です。

于 2012-06-26T18:39:25.313 に答える
2

ワンラインソリューション:

return badFileName.replaceAll("[^0-9_a-zA-Z\\(\\)\\%\\-\\.]", "");

英数字とスペースだけに制限したい場合:

return badFileName.replaceAll("[^a-zA-Z0-9 ]", "");

乾杯 :)

于 2015-08-28T09:35:34.807 に答える