FileReference的使用对有效字符有一个限制。
Error: Error #2087: The FileReference.download() file name contains prohibited characters.
这很好,因为我想这个限制无论如何都来自底层文件系统。
是否有一种通用的方法来修剪/替换所有被禁止的字符?
为了清晰起见,我想要的是:
var dirty:String = "Eat this !@##$%%^&&*()\/";.txt
var clean:String = dirty.replaceAllProhibitedCharacters();
我不是在寻找OS特定的正则表达式,而是一个跨平台的解决方案。
发布于 2012-01-19 14:52:00
不允许的字符列表不会根据基础操作系统而改变,它是一个固定列表。从FileReference.download()的文档中,不允许的字符列表是:
/\:*?"<>|%编辑:,看起来@也是不允许的。
如果要从任意字符串中删除这些字符,可以执行以下操作:
var validFileName:String = invalidFileName.replace(/[\/\\:*?"<>|%@]/g, "");如果您想用其他方法替换它们,那么将第二个参数更改为replace()。
编辑:添加了@字符;转义了/字符。
发布于 2013-11-22 14:57:46
以前的回答对我没有用。这就是起作用的地方(使用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( "/\\:*?\"<>|%" ) );
}
}https://stackoverflow.com/questions/8927711
复制相似问题