투케이2K

367. (java/자바) [유틸 파일] getCallNumFormat 휴대폰 번호 및 지역 전화 번호 형식 문자열 포맷 함수 - Pattern , Matcher 정규식 사용 본문

Java

367. (java/자바) [유틸 파일] getCallNumFormat 휴대폰 번호 및 지역 전화 번호 형식 문자열 포맷 함수 - Pattern , Matcher 정규식 사용

투케이2K 2026. 4. 4. 12:59
728x90
반응형

[개발 환경 설정]

개발 툴 : 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
반응형
Comments