3

FileReference の使用には、有効な文字に関する制約があります。
Error: Error #2087: The FileReference.download() file name contains prohibited characters.
とにかく、制限は基礎となるファイルシステムから来ていると思うので、これは問題

ありません。禁止されているすべての文字を削除/置換する一般的な方法などはありますか?

明確にするために、私は次のようなもの
var dirty:String = "Eat this !@##$%%^&&*()\/";.txt
var clean:String = dirty.replaceAllProhibitedCharacters();

を求めています。OS固有の正規表現を探しているのではなく、クロスプラットフォームソリューションを探しています。

4

2 に答える 2

7

許可されない文字のリストは、基盤となる OS によって変わることはなく、固定されたリストです。FileReference.download()許可されていない文字のリストのドキュメントは次のとおりです。

/\:*?"<>|%

編集:@どちらも許可されていないようです。

これらの文字を任意の文字列から削除したい場合は、次のようにすることができます。

var validFileName:String = invalidFileName.replace(/[\/\\:*?"<>|%@]/g, "");

それらを別のものに置き換えたい場合は、2 番目のパラメーターを に変更しますreplace()

編集:@キャラクターを追加しました。/文字をエスケープしました。

于 2012-01-19T14:52:00.980 に答える
3

前の答えは私にはうまくいきませんでした。これはうまくいきました(Flex 4.5を使用):

public class FileNameSanitizer
{
public static function sanitize( fileName:String ):String
{
    var p:RegExp = /[:\/\\\*\?"<>\|%]/g;
    return fileName.replace( p, "" );
}
}

そして、それを証明するテストケース:

import flexunit.framework.TestCase;

public class FileNameSanitizerTest extends TestCase
{
    public function FileNameSanitizerTest()
    {
    }

    public function testSanitize():void
    {
        assertEquals( "bla", FileNameSanitizer.sanitize( "bla" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla/foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla\\foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla:foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla*foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla?foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla\"foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla<foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla>foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla|foo" ) );
        assertEquals( "blafoo", FileNameSanitizer.sanitize( "bla%foo" ) );

        assertEquals( "", FileNameSanitizer.sanitize( "/\\:*?\"<>|%" ) );
    }

}
于 2013-11-22T14:57:46.010 に答える