【问题标题】:Flex FileReference prohibited charactersFlex FileReference 禁止字符
【发布时间】:2012-01-19 14:26:48
【问题描述】:

FileReference 的使用对有效字符有限制。
Error: Error #2087: The FileReference.download() file name contains prohibited characters.
这很好,因为我猜这个限制无论如何都来自底层文件系统

是否存在修剪/替换所有禁止字符的通用方法?

为了清楚起见,我追求的是:
var dirty:String = "Eat this !@##$%%^&&*()\/";.txt
var clean:String = dirty.replaceAllProhibitedCharacters();

我不是在寻找特定于操作系统的正则表达式,而是跨平台解决方案。

【问题讨论】:

    标签: apache-flex filereference


    【解决方案1】:

    禁止字符列表不会因底层操作系统而改变,它是一个固定列表。在FileReference.download() 的文档中,不允许使用的字符列表是:

    /\:*?"<>|%
    

    编辑:看起来@也不允许。

    如果您想从任意字符串中删除这些字符,您可以执行以下操作:

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

    如果你想用其他东西替换它们,那么将第二个参数更改为replace()

    编辑:添加了@ 字符;转义了 / 字符。

    【讨论】:

    • 我实际上是在调用 FileReference.save() ,它会引发上述错误。出于某种原因,我还不得不替换“@”...感谢您的回复
    • 嘿,我刚刚检查了 Flex 4.6 的实时文档,save() 方法与download() 方法具有相同的禁止字符列表......无论如何,我很高兴它解决了你的问题.
    • 该正则表达式不起作用,因为某些字符需要转义。结合所需的'@',我使用: var validFileName:String = invalidFileName.replace(/[\/\\:*\?"\|%@]/g, "");
    • @steve 只有反斜杠需要转义。其他字符在字符类中没有特殊含义。感谢您发现这一点!
    • '/' 也必须转义。它是正则表达式的结束字符,因此您的代码将无法编译
    【解决方案2】:

    以前的答案对我不起作用。这确实有效(使用 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( "/\\:*?\"<>|%" ) );
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2019-08-31
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多