我使用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;
}
答案 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匹配。