首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flex FileReference禁用字符

Flex FileReference禁用字符
EN

Stack Overflow用户
提问于 2012-01-19 14:26:48
回答 2查看 3.2K关注 0票数 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特定的正则表达式,而是一个跨平台的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-19 14:52:00

不允许的字符列表不会根据基础操作系统而改变,它是一个固定列表。从FileReference.download()的文档中,不允许的字符列表是:

代码语言:javascript
运行
复制
/\:*?"<>|%

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

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

代码语言:javascript
运行
复制
var validFileName:String = invalidFileName.replace(/[\/\\:*?"<>|%@]/g, "");

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

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

票数 7
EN

Stack Overflow用户

发布于 2013-11-22 14:57:46

以前的回答对我没有用。这就是起作用的地方(使用Flex 4.5):

代码语言:javascript
运行
复制
public class FileNameSanitizer
{
public static function sanitize( fileName:String ):String
{
    var p:RegExp = /[:\/\\\*\?"<>\|%]/g;
    return fileName.replace( p, "" );
}
}

为了证明这一点:

代码语言:javascript
运行
复制
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( "/\\:*?\"<>|%" ) );
    }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8927711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档