Notice
Recent Posts
Recent Comments
Link
투케이2K
560. (kotlin/코틀린) [유틸 파일] getCallNumFormat 휴대폰 번호 및 지역 전화 번호 형식 문자열 포맷 함수 - Pattern , Matcher 정규식 사용 본문
Kotlin
560. (kotlin/코틀린) [유틸 파일] getCallNumFormat 휴대폰 번호 및 지역 전화 번호 형식 문자열 포맷 함수 - Pattern , Matcher 정규식 사용
투케이2K 2026. 4. 5. 12:52728x90
반응형
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Kotlin

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 구분 : 유틸 파일 / 정규식 / Phone Format
- 사전) 👉 Matcher 간략 설명 :
>> Matcher 는 정규식(Pattern)을 특정 문자열에 적용해서 검색 , 매칭 결과 추출 , 치환을 수행하는 객체입니다.
- 패키지 : java.util.regex.Matcher
>> 자바의 정규식은 항상 2단계 구조입니다.
Pattern pattern = Pattern.compile("정규식");
Matcher matcher = pattern.matcher("대상 문자열");
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
fun getCallNumFormat(callNum: String): String {
// [리턴 변수 선언]
var returnData = ""
// [로직 처리 수행]
try {
if (stringNotNull(callNum) == true) { // Not Null
// ------------------------------------------------------------
// TODO 입력 된 값이 전화 번호 형식 및 휴대폰 정규식 패턴을 만족하는지 확인
// ------------------------------------------------------------
// TODO search ex : 010-1234-5678
// TODO search ex : 02-1234-5678
// TODO search ex : 054-123-4567
// ------------------------------------------------------------
// val patternString = "^01([0-9])-(\\d{3}|\\d{4})-\\d{4}$"; // TODO 휴대폰 찾기 정규식
val patternString = "^(\\d{2}|\\d{3})-(\\d{3}|\\d{4})-\\d{4}$" // TODO 휴대폰, 지역 번호 까지 모두 호환 찾기 정규식
// [인풋 값이 패턴 형식을 만족하는지 확인]
val pattern = Pattern.compile(patternString)
val matcher = pattern.matcher(callNum)
if (matcher.matches() == true) { // TODO 패턴 형식 만족
//S_Log.d("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [getCallNumFormat] : pattern matches success >>>>>>>>>>>>>>>>>>>>>>>");
returnData = callNum
} else { // TODO 패턴 만족 안함
//S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [getCallNumFormat] : not pattern matches >>>>>>>>>>>>>>>>>>>>>>>");
var replaceCallNum = callNum
replaceCallNum = replaceCallNum.replace( // 특수문자 지우기 그룹 지정
"[!@#$%^&*().,?:;/_{}+=-]".toRegex(),
""
)
/*
replaceCallNum = replaceCallNum.replaceAll("-", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("_", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("[.\\s]", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll(":", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("/", ""); // 개별 지우기
// */
replaceCallNum = replaceCallNum.replace(" ".toRegex(), "") // 공백 제거
// TODO 치환된 문자열이 모두 숫자 구정 및 전화 번호 및 휴대폰 번호 길이 만족 체크
if (stringNotNull(replaceCallNum) == true
&& replaceCallNum.matches("\\d+".toRegex()) == true) { // 널이 아니고, 모두 숫자로 구성 여부 확인
if (replaceCallNum.length == 11) { // TODO 01012345678 (11 자)
returnData = replaceCallNum.replace(
"(\\d{3})(\\d{4})(\\d{4})".toRegex(),
"$1-$2-$3"
)
} else if (replaceCallNum.length == 10) { // TODO 0212345678 / 0541234567 (10 자)
val subPatternString = "^(0[3-6][1-4])(\\d{3})\\d{4}$" // TODO 서울 외의 지역 번호 인 경우
val subPattern = Pattern.compile(subPatternString)
val subMatcher = subPattern.matcher(replaceCallNum)
returnData = if (subMatcher.matches() == true) {
replaceCallNum.replace(
"(\\d{3})(\\d{3})(\\d{4})".toRegex(),
"$1-$2-$3"
)
} else {
replaceCallNum.replace(
"(\\d{2})(\\d{4})(\\d{4})".toRegex(),
"$1-$2-$3"
)
}
} else {
S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [getCallNumFormat] : Error = replaceCallNum length match error >>>>>>>>>>>>>>>>>>>>>>>")
}
} else {
S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [getCallNumFormat] : Error = replaceCallNum is not number >>>>>>>>>>>>>>>>>>>>>>>")
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
// ------------------------------------------------------------
// TODO return ex : 010-1234-5678
// TODO return ex : 02-1234-5678
// TODO return ex : 054-123-4567
// ------------------------------------------------------------
S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>>>>> [getCallNumFormat] : Length = " + returnData.length.toString() + " / " + returnData.toString() + " >>>>>>>>>>>>>>>>>>>>>>>")
// [리턴 반환]
return returnData
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[stringRegexpContains : String 문자열에 특정 정규식 패턴 포함 확인]
https://kkh0977.tistory.com/5854
https://blog.naver.com/kkh0977/223409583220?trackingCode=blog_bloghome_searchlist
[matches 정규식 - matches 정규식을 사용해 문자,숫자,특수문자 여부 확인]
https://kkh0977.tistory.com/53
https://blog.naver.com/kkh0977/222191690480?trackingCode=blog_bloghome_searchlist
[matches 정규식 (RegEx) 사용법 정리 - 특수문자 제거 및 지정 문자 허용]
https://kkh0977.tistory.com/1098
https://blog.naver.com/kkh0977/222463866741?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Kotlin' 카테고리의 다른 글
Comments
