본문 바로가기

Flash/Information

[팁] 플래시(Flash) 텍스트필드(TextField)에서 입력글자 제한하기!

* 본 은 Adobe에서 제공하는 문서를 참조한 것입니다.
* 문서 원본 보기 : http://www.urlclip.net/flash_textfield_restrict

텍스트필드의 인스턴스네임이 my_txt일 경우 아래와 같이 입력글자를 제한할 수 있습니다.

이전에 작성한 "[팁] 플래시에서 사용되는 키보드 키 코드(Keyboard Key Code)와 ASCII 코드 값!" 를 참고하신다면 다양한 특수문자까지 제한할 수 있을 것입니다.


0. 텍스트필드 입력글자 제한 기본 폼
기본 폼은 아래와 같습니다. "희망하는 글자"에 원하는 글자를 넣거나, 입력을 제한하고 싶은 글자를 넣을 수 있습니다.
텍스트필드의 인스턴스명.restrict = "희망하는 글자";


1. 영어 대문자와 숫자만을 입력할 수 있게 하는 방법
(The following example allows only uppercase characters, spaces, and numbers to be entered into a text field)
영어의 경우 기본적으로 대문자소문자를 구별해 설정할 수 있습니다. 아래와 같이 영어 대문자를 쓴 후, "-"를 넣게되면 A부터 Z까지 모든 알파벳을 의미하게 됩니다. 마찬가지로 숫자도 동일하게 적용할 수 있습니다.
my_txt.restrict = "A-Z 0-9";


2. 영어 소문자를 제외한 모든 글자를 입력할 수 있게 하는 방법
(The following example includes all characters, but excludes lowercase letters)
1번과 유사하게 a-z라고 하게되면 소문자 a부터 z까지의 글자를 의미합니다. 하지만 글자 앞에 "^"를 넣게 되면 ^다음에 나오는 글자를 제외하라!는 의미가 됩니다.
my_txt.restrict = "^a-z";


3. 대쉬(-)와 지수표시(^)만을 입력할 수 있게 하는 방법
(You can use a backslash to enter a ^ or - verbatim. The accepted backslash sequences are \-, \^ or \\. The backslash must be an actual character in the string, so when specified in ActionScript, a double backslash must be used. For example, the following code includes only the dash (-) and caret (^))
대쉬와 지수표시를 넣기 위해서는 백슬래쉬 문자 "\"를 이용할 수 있습니다. 백슬래쉬를 사용해 표시하는 글자는 \-, \^, \\이기 때문에(즉, 백슬래쉬 자신도 "\\"와 같이 표현해야 하므로), 액션스크립트에서 대쉬와 지수표시는 아래와 같이백슬래쉬를 두 번 써야 합니다.
my_txt.restrict = "\\-\\^";


4. 대문자 Q를 제외한 모든 영어 대문자를 입력할 수 있게 하는 방법
(The ^ may be used anywhere in the string to toggle between including characters and excluding characters. The following code includes only uppercase letters, but excludes the uppercase letter Q)
1번의 경우에서 특수한 글자의 입력만 제한하고 싶을 때는 2번에 설명한 바와 같이 "^"를 사용하면 됩니다. 따라서, 아래의 예에서는 대문자 Q를 제외한 모든 글자가 입력 가능합니다.
my_txt.restrict = "A-Z^Q";


5. 스페이스바(ASCII 32)부터 물결(ASCII 126)표시(~)까지 입력할 수 있게 하는 방법
(You can use the \u escape sequence to construct restrict strings. The following code includes only the characters from ASCII 32 (space) to ASCII 126 (tilde).)
"\u"를 이용하면 특수한 키를 설정할 수 있습니다. 아스키코드 32번 스페이스바\u0020, 아스키코드 126번결표시\u007E로 표시 가능하며 이 둘을 "-"로 연결함으로써 이 사이에 존재하는 모든 키들의 입력을 설정할 수 있습니다.
my_txt.restrict = "\u0020-\u007E";


6. 한글을 제외한 모든 글자를 입력할 수 있게 하는 방법
한글을 제외한 모든 글자를 입력받기 원하면 아래와 같이 설정하면 됩니다.(영어, 숫자, 특수문자, 특수한 키 등 모든 글자가 입력 가능합니다.)
my_txt.restrict = "!-~";


7. 한글만 입력할 수 있게 하는 방법
6번과 반대로 오직 한글만을 입력 가능하게 하려면 아래와 같이 설정하면 됩니다. 한글의 첫글자라 할 수 있는 부터 마지막 글자라고 할 수 있는 (이 글자는 도대체 어디에 들어갈까요? ^^)을 "-"로 연결하면 됩니다.
my_txt.restrict = "ㄱ-힣";


8. 일반적인 이메일 아이디와 같이 제한하는 방법
(대소문자 영어, 숫자, -, _ 만 입력 가능하게 하되, 중간에 공백은 넣을 수 없게 제한하는 방법)
이상으로 익힌 일련의 규칙들을 이용해 일반적인 이메일 아이디 규칙을 만들어 보겠습니다. 일부 메일의 경우(Gmail 등) 마침표 "."도 입력이 가능하지만, 여기에서는 마침표는 제외한 영어, 숫자, -, _만 입력 가능한 경우를 가정하였습니다.
my_txt.restrict = "A-Z a-z 0-9 \\- _ ^\u0020";


* 활용예
위의 규칙들을 이용해 텍스트필드의 입력 글자를 제한(8번과 같이 영어입력만 가능한 경우)하면 입력이 제한된 키(한글)는 아무리 눌러도 글씨가 써지지 않습니다. 하지만, 이 같은 글자 입력 제한을 모르는 사용자나 의도하지 않게 키보드 입력 상태가 (영어가 아닌)한글로 되어 있는 경우, 정상적인 키 입력이 되지 않으므로 혼란을 초래할 수 있습니다.

그래서 텍스트필드의 입력 제한 설정에 맞게 사용자의 키보드 입력 상태를 한글 혹은 영어로 자동으로 변환해줘야 할 필요가 있습니다. 그런데 어떻게 하면 될까요?

바로 아래의 스크립트를 활용하면 됩니다. ^_^;
아래의 예는 my_txt라는 텍스트필드로 포커스가 맞춰질 경우(즉 my_txt라는 텍스트필드를 클릭해 글자를 입력하려고 하면...) 자동으로 영어입력 모드로 바꿔주는 스크립트입니다. 아래에서 "System.IME.ALPHANUMERIC_HALF"가 영어입력 모드를 의미합니다.

my_txt.restrict = "A-Z a-z 0-9 \\- _ ^\u0020";
my_txt.onSetFocus = function(){
        if (System.capabilities.hasIME) {
            if (System.IME.getConversionMode() == "KOREAN") {
                System.IME.setConversionMode(System.IME.ALPHANUMERIC_HALF);
            }
        }
}

이제 위 규칙들을 잘 응용해 자신이 원하는 키 입력 설정을 할 수 있을 것입니다.
* 잘못된 부분이나 추가하고 싶은 내용은 댓글로 알려주세요 :)