Flutter TextField 한글만 입력 허용하기 (천지인/10키 조합형 문제 해결 포함)

Taek-In Jeong·2022년 5월 11일
1
post-custom-banner

알아보자

TextField(
    controller: controller.nicknameController,
    inputFormatters: <TextInputFormatter>[
        FilteringTextInputFormatter.allow(RegExp(r'[ㄱ-ㅎ|ㅏ-ㅣ|가-힣|ᆞ|ᆢ]')),
    ],
),

RegExp의 내용을 보면 허용된 문자는 아래와 같다.

  1. ㄱ-ㅎ로 자음
  2. ㅏ-ㅣ로 모음
  3. 가-힣으로 완성형 한글
  4. 천지인/10키에서 모음을 완성하기 위한 아래아
  5. 천지인/10키에서 모음을 완성하기 위한 쌍아래아 (아래야)
  • 아래아를 추가해주었음에도
    iOS 10키 키패드에서 입력 시 한글이 정상적으로 입력되지 않는 문제가 있어서
    ㅏ-ㅣ 까지 추가하니 문제가 완전히 해결됨

  • 추가로 영어나 숫자를 더 허용하고 싶으면 아래와 같이 추가해주면 됨

FilteringTextInputFormatter.allow(RegExp(r'[a-z|A-Z|0-9|ㄱ-ㅎ|ㅏ-ㅣ|가-힣|ᆞ|ᆢ]'))

이 아니라

20220527 추가

위와 같이 하면
자음+아래아가 안쪽에 있는 모음(ㅓㅕㅗㅛㅔㅖ 등)을 쓸 때 문제가 있다.
최초 문자에서는 문제가 없지만 이어지는 문자에서 쓰고자 하면 자음이 사라지는 문제가 발생한다.

설명을 하기가 어려워 아래 이미지를 첨부한다.

그래서 아래와 같이 일일히 자음+아래아를 추가하니 문제가 해결되었다.

FilteringTextInputFormatter.allow(RegExp(r'[a-z|A-Z|0-9|ㄱ-ㅎ|ㅏ-ㅣ|가-힣|ᆞ|ᆢ|ᄀᆞ|ᄂᆞ|ᄃᆞ|ᄅᆞ|ᄆᆞ|ᄇᆞ|ᄉᆞ|ᄋᆞ|ᄌᆞ|ᄎᆞ|ᄏᆞ|ᄐᆞ|ᄑᆞ|ᄒᆞ]'))

.
.

진짜 끝

이 아니라

20220527 또 추가

iOS 10키에서는 위에까지 하면 정상적으로 입력이 되었는데,
안드로이드 천지인에서는 여전히 입력이 안되었다.

어처구니가 없게도 두 키패드가 쓰는 아래아의 문자가 다르다.

iOS 아래아
ᆞ|ᆢ

안드로이드 아래아
ㆍ|ᆢ

둘 다 추가해주어 문제를 해결하였다.

FilteringTextInputFormatter.allow(RegExp(r'[a-z|A-Z|0-9|ㄱ-ㅎ|ㅏ-ㅣ|가-힣|ᆞ|ᆢ|ㆍ|ᆢ|ᄀᆞ|ᄂᆞ|ᄃᆞ|ᄅᆞ|ᄆᆞ|ᄇᆞ|ᄉᆞ|ᄋᆞ|ᄌᆞ|ᄎᆞ|ᄏᆞ|ᄐᆞ|ᄑᆞ|ᄒᆞ]'))

.
.
.
진짜
진짜

post-custom-banner

4개의 댓글

comment-user-thumbnail
2022년 6월 16일

자바스크립트로 작업하며 같은 오류로 인해 어려움을 겪다가
작성해준 내용을 토대로 해결했습니다. 감사합니다 🙏😆

1개의 답글
comment-user-thumbnail
2023년 9월 7일

여기저기 찾아봐도, 처음에 쓰셨던 r'[ㄱ-ㅎ|ㅏ-ㅣ|가-힣|ᆞ|ᆢ]' 이런 것만 나왔는데 ㅋㅋㅋㅋ
덕분에 잘 해결했습니다. 감사합니다 (__)

답글 달기
comment-user-thumbnail
2023년 10월 27일

쌍자음 아래아 가 합쳐진
ᄁᆞᄊᆞ 도 패턴에 추가하셔야 할 것 같습니다. 아이폰으로 테스트 해보시면 알거에요

답글 달기