在actionscript正则表达式中指定unicode范围

时间:2012-05-02 12:44:39

标签: regex actionscript-3 flex actionscript

我一直在尝试编写一个匹配所有unicode字符的正则表达式,如:

/[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\w]/gi

但是这完全失败并且与任何事情都不匹配。我尝试了各种各样的表达式,似乎只要我尝试指定一个范围就失败了。谁比我幸运?

我希望actionscript会提供类似\ p {L}的内容,但是如果有类似内容,我就无法在doc中找到它。

3 个答案:

答案 0 :(得分:3)

您可以将String.fromCharCode与unicode字符一起使用,然后范围将在正则表达式中正常工作。以下是使用原始问题的示例:

var exp:RegExp = new RegExp("[" + generateRangeForUnicodeVariables(0x00A0, 0xD7FF) + generateRangeForUnicodeVariables(0xF900, 0xFDCF) + generateRangeForUnicodeVariables(0xFDF0, 0xFFEF) + "\w]", "gi");

private function generateRangeForUnicodeVariables(var1:Object, var2:Object):String
{
   return String.fromCharCode(var1) + "-" + String.fromCharCode(var2);
}

答案 1 :(得分:1)

这已成为一个问题,我找不到任何已解决的信息,之前曾在以下网站上提出过:

Restrict input to a specified language

How to specify a unicode range in a RegExp?

我知道这是一个hack,但它确实可以在JavaScript中运行,因此您可以使用ExternalInterface将测试存储在那里并将结果传回去。

答案 2 :(得分:0)

嗯。看起来它不是关于范围,而是关于多字节字符。

这有效:

 var exp:RegExp = new RegExp("[\u00A0-\u0FCF]", "gi");
 var str:String = "\u00A1 \u00A2 \u00A3 \u00A3";
 trace("subject:", str);
 trace("match:", str.match(exp));

这不是:

 var exp:RegExp = new RegExp("[\u00A0-\u0FD0]", "gi");
 var str:String = "\u00A1 \u00A2 \u00A3 \u00A3";
 trace("subject:", str);
 trace("match:", str.match(exp));

无论如何,您可以使用将字符串转换为匹配模式的RegExp构造函数。