入力した値を変換するInputField
FlashのTextFieldで、入力された値を変換する方法がぐぐってもでてこなかったので自分用にメモしておきます。
基本的な処理としては、TextFieldの「TEXT_INPUT」イベントで入力イベントを一旦止めて、自前でtextプロパティの値を変更しています。*1
以下がイベントメソッドの抜粋です。
private function onTextInput(event:TextEvent):void { event.preventDefault(); // 一旦イベントを止める。 var input:String = event.text.toUpperCase(); // 全て大文字にして input = input.replace(/[^A-ZA-Z]/g, ""); // 半角全角アルファベット以外は削除 input = input.replace(/[A-Z]/g, function():String { var charCode:Number = arguments[0].charCodeAt(0); return String.fromCharCode(charCode - 0x41 + 0xff21); // 'A'->'A' }); var oldText:String = inputField.text; // 今までの値と選択箇所の情報を元に、新たな値を設定 inputField.text = oldText.substring(0, inputField.selectionBeginIndex) + input + oldText.substr(inputField.selectionEndIndex); inputField.setSelection(inputField.selectionBeginIndex + input.length, inputField.selectionBeginIndex + input.length); // キャレットの場所も移動しておく }
動くコードはwonderflに投稿してあるので、以下のリンクから見れます。
wonderfl build flash online | 面白法人カヤック
*1:「TEXT_INPUT」イベントに渡されるTextEventオブジェクトのtextプロパティを変更しても、イベントの結果には反映されませんでした。