양식이있는 문자열이 있습니다. 예를들어 전화번호,이메일,비밀번호가있습니다.
코드에서 문자열이 양식에 알맞는지 검사하는것을 유효성 검사라고 말합니다.
이런 유효성검사는 크게 2가지 방법으로 나눌수있습니다. 하나는 조건문으로 하나씩 체크를 하는것입니다. 조건이 적거나 코딩테스트같은경 빠르게 검사를 할수 있다는 점에서 이방법은 효과적일수있습니다. 그렇지만 해당 조건이길어지게 된다면 이 조건식은 늘어나게될것이고 결과적으로는 가독성을 떨어트려 유지보수가 힘들어집니다. 그래서 나온방법이 정규식입니다.
정규식은 문자열과 메타문자를 합하여 문자열양식을 만들어 문자열을 검사하는 방법입니다. 이방법은 대게 정규식 클래스에서 유효성검사가필요할때마다 입력받은 양식문자열을 조건식으로 바꿔 매번 검사하는 방식입니다. 이방법은 내부적으로 추가동작이되기때문에 조건문보다 자원을 많이 사용하게 될것입니다. 그렇지만 조건식을 줄여 가독성을 좋게만든다면 이 단점은 그리 크지 않을것 입니다.
그렇다면 정규식을 만드는 방법에 관하여 알아봅시다.
Kotlin에서 정규식을 이용하고 싶을때는 Regex클래스를 만들어 사용합니다.
Regex클래스는 정규 표현식을 사용하여 문자열을 매치하고 검색하며, 대체하거나 분할하는 등의 작업을 수행할 수 있습니다.
//입력 문자열이 정규 표현식과 정확히 일치하는지 여부를 확인합니다.
matches(input: CharSequence): Boolean
//입력 문자열에서 정규 표현식에 맞는 첫 번째 부분 문자열을 찾습니다.
find(input: CharSequence, startIndex: Int = 0): MatchResult?
//입력 문자열에서 모든 정규 표현식에 맞는 부분 문자열을 찾습니다.
findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult>
//입력 문자열에서 정규 표현식과 일치하는 부분을 대체합니다.
replace(input: CharSequence, replacement: String): String
//입력 문자열을 정규 표현식을 기준으로 분할합니다.
split(input: CharSequence, limit: Int = 0): List<String>
이러한 작업을 하기위해서는 Regex생성시 pattern문자열을 넣어줘야합니다. 정규식에서는 메타문자라고 불리는 특수 문자들을 사용하여 패턴을 정의합니다. 이러한 메타문자들은 특정한 의미를 갖기 때문에 패턴을 더욱 유연하게 만들 수 있습니다.
위의 \s, \t, \d, \b, \w는 대문자로 바꾸면 반대 의미가 됩니다.
val patternArr : ArrayList<String> = arrayListOf<String>(
//이메일 주소
"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}",
//URL
"(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]",
//전화번호
"(\d{2,3})-(\d{3,4})-(\d{4})",
//IP 주소
"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b",
//HTML 태그
"<("[^"]*"|'[^']*'|[^'">])*>",
//날짜
"(\d{4})-(\d{2})-(\d{2})",
//주민등록번호
"(\d{6})-?(\d{7})",
)
메타문자를 이용하여 이런식으로 patter문자열을 만들수있습니다. 이제 이것을 이용해서 유효성검사나 문자열을 찾거나 교체등의 작업을 할수있게됩니다.
reference
https://yoon-dailylife.tistory.com/113