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

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 구분 : 유틸 파일 / 정규식 / Phone Format
- 사전) 👉 Matcher 간략 설명 :
>> Matcher 는 정규식(Pattern)을 특정 문자열에 적용해서 검색 , 매칭 결과 추출 , 치환을 수행하는 객체입니다.
- 패키지 : java.util.regex.Matcher
>> 자바의 정규식은 항상 2단계 구조입니다.
Pattern pattern = Pattern.compile("정규식");
Matcher matcher = pattern.matcher("대상 문자열");
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// ---------------------------------------------------------------
// TODO [SEARCH FAST] : [HTTP] : 공통 전화 번호 형식 '-' 하이픈 포맷
// ---------------------------------------------------------------
public static String getCallNumFormat(String callNum){
// [리턴 변수 선언]
String returnData = "";
// [로직 처리 수행]
try {
if (C_Util.stringNotNull(callNum) == true){ // Not Null
// ------------------------------------------------------------
// TODO 입력 된 값이 전화 번호 형식 및 휴대폰 정규식 패턴을 만족하는지 확인
// ------------------------------------------------------------
// TODO search ex : 010-1234-5678
// TODO search ex : 02-1234-5678
// TODO search ex : 054-123-4567
// ------------------------------------------------------------
// String patternString = "^01([0-9])-(\\d{3}|\\d{4})-\\d{4}$"; // TODO 휴대폰 찾기 정규식
String patternString = "^(\\d{2}|\\d{3})-(\\d{3}|\\d{4})-\\d{4}$"; // TODO 휴대폰, 지역 번호 까지 모두 호환 찾기 정규식
// [인풋 값이 패턴 형식을 만족하는지 확인]
Pattern pattern = Pattern.compile(patternString);
Matcher 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 >>>>>>>>>>>>>>>>>>>>>>>");
String replaceCallNum = callNum;
replaceCallNum = replaceCallNum.replaceAll("[!@#$%^&*().,?:;/_{}+=-]", ""); // 특수문자 지우기 그룹 지정
/*
replaceCallNum = replaceCallNum.replaceAll("-", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("_", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("[.\\s]", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll(":", ""); // 개별 지우기
replaceCallNum = replaceCallNum.replaceAll("/", ""); // 개별 지우기
// */
replaceCallNum = replaceCallNum.replaceAll(" ", ""); // 공백 제거
// TODO 치환된 문자열이 모두 숫자 구정 및 전화 번호 및 휴대폰 번호 길이 만족 체크
if (C_Util.stringNotNull(replaceCallNum) == true
&& replaceCallNum.matches("\\d+") == true){ // 널이 아니고, 모두 숫자로 구성 여부 확인
if (replaceCallNum.length() == 11){ // TODO 01012345678 (11 자)
returnData = replaceCallNum.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1-$2-$3");
}
else if (replaceCallNum.length() == 10){ // TODO 0212345678 / 0541234567 (10 자)
String subPatternString = "^(0[3-6][1-4])(\\d{3})\\d{4}$"; // TODO 서울 외의 지역 번호 인 경우
Pattern subPattern = Pattern.compile(subPatternString);
Matcher subMatcher = subPattern.matcher(replaceCallNum);
if (subMatcher.matches() == true){
returnData = replaceCallNum.replaceAll("(\\d{3})(\\d{3})(\\d{4})", "$1-$2-$3");
}
else {
returnData = replaceCallNum.replaceAll("(\\d{2})(\\d{4})(\\d{4})", "$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 (Exception e){
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 = " + String.valueOf(returnData.length()) + " / " + String.valueOf(returnData) + " >>>>>>>>>>>>>>>>>>>>>>>");
// [리턴 반환]
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
반응형
'Java' 카테고리의 다른 글
Comments
