Flex FileReference запрещенные символы - PullRequest
3 голосов
/ 19 января 2012

Использование FileReference имеет ограничение на допустимые символы.
Error: Error #2087: The FileReference.download() file name contains prohibited characters.
Это нормально, так как я предполагаю, что в любом случае ограничение исходит от базовой файловой системы

Существуют ли такие вещи, как общий способ обрезки / замены всех запрещенных символов?

Для ясности я после чего-то вроде:
var dirty:String = "Eat this !@##$%%^&&*()\/";.txt
var clean:String = dirty.replaceAllProhibitedCharacters();

Я не ищу регулярные выражения для конкретных ОС, а кросс-платформенное решение.

Ответы [ 2 ]

7 голосов
/ 19 января 2012

Список запрещенных символов не меняется в зависимости от базовой ОС, это фиксированный список. Из документации на FileReference.download() список запрещенных символов:

/\:*?"<>|%

Редактировать: Похоже, @ тоже не разрешено.

Если вы хотите удалить эти символы из произвольной строки, вы можете сделать что-то вроде этого:

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

Если вы хотите заменить их чем-то другим, измените второй параметр на replace().

Редактировать: добавлен символ @; экранировал символ /.

3 голосов
/ 22 ноября 2013

Предыдущий ответ не работал для меня.Вот что сработало (Использование 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( "/\\:*?\"<>|%" ) );
    }

}
...