코틀린 안드로이드 정규식(Regex) 활용하기 -기본부터 심화
안드로이드에서 정규식은 주로 회원가입 같이 입력한 값이 특정한 양식을 따르는지 확인할 때 주로 사용됩니다.
1. 기본 개념 및 양식
^ : 문자열의 시작을 의미.
$ : 문자열의 끝을 의미.
. : 문자 한 개를 의미. '.'이 위치한 곳에 어떤 문자든지 1개의 문자가 들어감.
[ ] : 대괄호에 있는 문자 중 한 개를 의미. [abc]는 a, b, c 중 하나를 선택.
[^] : not의 의미로, 대괄호에서 쓴다면 [^abc] : a, b, c 제외하고 나머지를 의미.
| : or을 의미. a|b : a 또는 b.
() : 공통되는 부분을 묶을 때, 서브 패턴을 지정할 때 사용. abc|abd -> ab(c|d)로 바꿀 수 있음.
? : 문자가 0회 또는 1회 등장. a? b는 a가 나올 수도, 없을 수도 있음. ab, b.
* : 문자가 0회 이상 등장. a*b : b, ab, aaab, aaab..
+ : 문자가 1회 이상 등장. a+b : ab, aab, aaab..
{n} : 문자가 n개 나옴. a {2} b : aab
{n,} : 문자가 n개 이상 나옴. a {2,} b : aab, aaab, aaaab..
{n, m} : 문자가 n개 이상 m개 이하로 나옴. a {1,3 } b : ab, aab, aaab
\s : 공백 제거
\t : 탭
\d : 숫자, [0-9]와 동일
\b : 단어의 경계, 문자 사이의 공백
\w : 알파벳이나 숫자, [a-zA-Z0-9_]와 동일
위의 \s, \t, \d, \b, \w는 대문자로 바꾸면 반대 의미가 됩니다.
2. 사용 방법
정규식을 만드는 방법에는 여러가지 방법이 있지만
대표적인거 1개만 가르쳐드리겠습니다.
정규식 정의 방법
val regex = Regex("[0-9|a-z]")
위와 같이 Regex 안에 정규식을 정의할 수 있습니다.
정규식을 사용해서 문자열 확인
아래의 코드는 Activity의 onCreate() 안에 정의했습니다.
// 웹 표준 형식 확인
val regexWeb = Regex("https://(.+)")
// 숫자만 있는지 확인
val regexOnlyNumber = Regex("-?\\d+(\\.\\d+)?")
// 파일 디렉토리인지 확인
val regexFileDirectory = Regex("(.+)/(.+)\\.(.+)")
// 숫자만 확인
val regexPickNumber = Regex("[^0-9]")
// 입력한 값이 https 웹 형식을 따르는지
binding.isHttpsWeb.setOnClickListener {
if (isRegexRight(binding.editText.text.toString(), regexWeb)) {
makeToast("알맞은 https 형식입니다.")
} else {
makeToast("틀린 https 형식입니다.")
}
}
// 입력한 값에 숫자만 들어있는지 확인
binding.isOnlyNumber.setOnClickListener {
if (isRegexRight(binding.editText.text.toString(), regexOnlyNumber)) {
makeToast("숫자만 존재")
} else {
makeToast("문자 존재함")
}
}
// 입력한 값이 파일 위치를 가리키는지 확인
binding.isFileDirectory.setOnClickListener {
if (isRegexRight(binding.editText.text.toString(), regexFileDirectory)) {
makeToast("올바른 파일 디렉토리")
} else {
makeToast("틀린 파일 디렉토리")
}
}
// 입력한 값에서 숫자만 뽑아서 다시 반환하기
binding.pickOnlyNumbers.setOnClickListener {
binding.textView.text =
onlyRemainsCertainChar(binding.editText.text.toString(), regexPickNumber)
}
// 해당 정규식이 맞는지 아닌지 확인
private fun isRegexRight(text: String, regex: Regex): Boolean {
return text.matches(regex)
}
// 해당 정규식에 맞는 값을 제외하고는 전부 삭제하기
private fun onlyRemainsCertainChar(text: String, regex: Regex): String {
return text.replace(regex, "")
}
3. 주로 사용되는 정규식 모음
자주 사용될거로 예상되는 정규식만 따로 모아서 정의해봤습니다.
// 웹 표준 형식 확인
val regexWeb = Regex("https://(.+)")
// 숫자만 있는지 확인
val regexOnlyNumber = Regex("-?\\d+(\\.\\d+)?")
// 파일 디렉토리인지 확인
val regexFileDirectory = Regex("(.+)/(.+)\\.(.+)")
// 숫자만 확인
val regexPickNumber = Regex("[^0-9]")
// 이메일 양식인지 확인
val regexEmail = Regex("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$")
// 전화번호 양식인지 확인
val regexPhoneNumber = Regex("^\\d{2,3} - \\d{3,4} - \\d{4}\$")
// 숫자와 문자 포함 형태의 6 ~ 20글자의 간단한 비밀번호
val regexSimplePassword = Regex("^[A-Za-z0-9]{6,20}\$")
// 숫자와 문자 포함 형태의 6글자 이상의 간단한 비밀번호
val regexSimplePassword2 = Regex("^[A-Za-z0-9]{6}\$")
// 특수문자, 문자, 숫자를 포함한 6 ~ 20글자의 복잡한 비밀번호
val regexComplexPassword = Regex("^.*(?=^.{8,15}\$)(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#\$%^&+=]).*\$")
4. 결과 화면
저는 이런식으로 화면을 구성하여 표현했습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'IT 관련 지식 > 안드로이드 개발' 카테고리의 다른 글
[초급]안드로이드 DataStore 사용방법 A to Z (0) | 2022.08.06 |
---|---|
안드로이드 recyclerView에서 setHasFixedSize 역할 (0) | 2022.07.25 |
안드로이드 에뮬레이서 밖에서 or 안에서 실행하기 (0) | 2022.05.14 |
WorkManager에서 suspend 함수 사용 시 두 번 호출 문제 (0) | 2022.05.11 |
안드로이드 특정 에뮬에서만 애드몹 안나올 때 해결!!! (0) | 2021.01.18 |