Ограничить ввод указанным языком - PullRequest
1 голос
/ 27 сентября 2011

Я использую TextInput компонента Flex 4.5 для ввода текста на английском языке. Я использую атрибут restrict , чтобы ... ограничить ввод с клавиатуры только символами a-zA-Z. Проблема в том, что если я скопирую / вставлю слово на другом языке, я смогу вставить его в компонент TextInput. Есть ли способ избежать этого? Если нет, как я могу проверить введенные данные на указанном языке?

Я обнаружил, что набор символов китайского + языка Юникод имеет значение от \ u4E00 до \ u9FFF. Поэтому я пишу следующее:

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

Но если я введу в TextInput слово 'hello', оно будет подтверждено ... В чем ошибка?

Поскольку я не могу (моя ошибка? Или ошибка?) Использовать диапазон Юникода с RegExp, я написал следующую функцию, чтобы проверить, есть ли слово на китайском и все.

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 голосов
/ 27 сентября 2011

Метод 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 в регулярном выражении.

...