限制输入到指定的语言(Restrict input to a specified language)

2019-09-29 10:06发布

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

因为我不能(我的错?还是错误?)使用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;
}

Answer 1:

String.match()方法返回一个数组,这将始终测试为真,即使它是空的(见文档在这里: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html#匹配%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的正则表达式。



文章来源: Restrict input to a specified language