2011-09-26 30 views
1

我使用TextInput Flex 4.5的组件来输入一些英文文本。我使用限制属性...将键盘输入限制为仅字符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输入单词“你好”,然后它验证...什么是错误?

因为我不能(我的错?或者一个错误?)在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; 
} 
+0

验证您要更改的字符? –

+0

其实是的......我已经实现了一些东西,这是非常简单的text.match(“_正则表达式”),但我很难验证简体中文(这是我想验证的语言:) –

+0

然后你需要确定中文使用的字符集。对不起,我不能帮助,我不说希腊语。 –

回答

0

String.match()方法返回一个数组,这将始终测试为真,即使它是空的(见文档在这里: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匹配。

+0

是的,这种方法是正确的,谢谢!但仍然有问题在正则表达式中指定unicode范围... –