将输入限制为指定的语言

时间:2011-09-26 22:06:38

标签: actionscript-3 flex flex4 flex4.5

我使用Flex 4.5的 TextInput 组件输入一些英文文本。我使用 restrict 属性来限制键盘输入到字符a-zA-Z。问题是如果我用另一种语言复制/粘贴一个单词,我可以将它粘贴到TextInput组件中。有没有办法避免这种情况?如果不是,我如何根据指定的语言验证输入?

我发现unicode中文+语言符号集是\ u4E00到\ u9FFF。所以我写下以下内容:

var chRE:RegExp = new RegExp("[\u4E00-\u9FFF]", "g");
if (inputTI.text.match(chRE)) {
  trace("chinese");
}
else {
  trace("other");
}

但是如果我在TextInput中键入'hello'这个词,那么它会验证......错误是什么?

既然我不能(我的错误?或者错误?)使用带有RegExp的unicode范围,我编写了以下函数来检查一个单词是否是中文,就是这样。

private function isChinese(word:String):Boolean
{
    var wlength:int = word.length;
    for (var i:int = 0; i < wlength; i++) {
            var charCode:Number = word.charCodeAt(i);
            if (charCode <= 0x4E00 || charCode >= 0x9FFF) {
                    return false;
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:0)

String.match()方法返回一个始终测试为true的数组,即使它是空的(请参阅此处的文档:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html#match%28%29

使用RegExp.test()方法查看是否匹配:

// Check your character ranges:
//var chRE:RegExp = new RegExp("[\u4E00-\u9FFF]", "g"); // \u9FFF is unrecognised and iscausing issues.
var chRE:RegExp = new RegExp("[\u4E00]+", "g"); // This works.
if (chRE.test(inputTI.text)) {
  trace("chinese");
}
else {
  trace("other");
}

你也需要检查字符范围 - 我无法让它与正则表达式中的\ u9FFF匹配。