[ 자바 코딩 ] Java Regular Expression 정규표현식 - 휴대폰 번호 패턴 만들기
안녕하세요. 제임스 입니다.
이번 포스팅에서는 자바 정규표현식을 이용하여 휴대폰 번호 패턴을 만들어 보겠습니다.
휴대폰 번호 패턴은 생각보다 많이 사용하는 형식이니 기본적인 셋팅과 커스터마이징을 통한 패턴을 저장해 두시면 좋을 것 같습니다.
그럼 시작해 보겠습니다.
■ 정규표현식으로 휴대폰 번호 패턴 만들기
국내 기준으로 휴대폰 번호 패턴을 만들어 보겠습니다.
일반적으로 휴대폰 번호는 세자리로 나뉘어져 있습니다.
첫 세자리는 아래와 같은 번호들이 올수 있습니다.
010
011
016
017
018
019
물론 지금에서야 대부분 010 을 사용하고 있지만 아직도 구 번호 체계를 그대로 사용하고 계신분들이 계시니 무시 할 수는 없습니다.
두번째 자리는 3 ~ 4자리의 임의의 숫자가 오면 됩니다.
세번째 자리는 일반적으로 4자리로 지정을 많이 하고 있으니 그대로 따르는 것으로 하겠습니다.
자릿수 사이에 아무 표기도 사용하지 않거나 " - " 로 구분 또는 " . " 로 구분 하는 것을 허용 하도록 하겠습니다.
01012341234
010-1234-1234
010.1234.1234
위 세가지 패턴 모두 허용 하는 것으로 작성 해보겠습니다.
▶ 첫 세자리
^01
정규표현식 패턴의 시작을 의미 하는 ^ 를 시작으로 01 을 추가했습니다.
문자열의 시작을 01 이라는 것을 의미합니다.
^01(?:0|1|[6-9])
01 다음에 오는 값으로 0, 1 또는 6 ~ 9 사이 값으로 지정을 했습니다.
▶ 두번째 자리
^01(?:0|1|[6-9])(\\d{3}|\\d{4})
3자리 또는 4자리의 숫자를 허용 하는 것으로 지정 합니다.
▶ 세번째 자리
^01(?:0|1|[6-9])(\\d{3}|\\d{4})(\\d{4})$
▶ 구분값 추가
휴대폰 번호를 입력 시 " - " 를 추가 하거나 국내에서는 많이 사용하지 않지만 " . " 를 추가 하는 경우가 있습니다.
아무런 표기를 하지 않거나 " - " 또는 " . " 를 허용 하는 코드를 추가 하겠습니다.
^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$
[.-]?
위 값은 " . " 또는 " - " 값이 없거나 단 한개만 존재 하는 것을 의미 합니다.
제가 작성한 정규표현식 최종 모습은 아래와 같습니다.
^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$
1 | String regExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; | cs |
위와 같이 자바 코드로 작성 후 위 표현식을 테스트 해보겠습니다.
1 2 | String mobNum1 = "01012345678"; System.out.println("mobile number 1 테스트 결과 ==> " + mobNum1.matches(regExp)); | cs |
mobNum1 의 값이 01 로 시작했고 세번째 값이 0으로 첫번째 자리는 모두 정상적으로 들어 왔습니다.
두번째 및 세번째 자리는 모두 숫자 값이고 7 ~ 8자리 (두자릿수 합) 의 값이어야 하는데 8자리로 이 것 역시 문제 없는 값으로 확인 됩니다.
위 코드를 실행한 결과는 아래와 같습니다.
Result
mobile number 1 테스트 결과 ==> true
1 2 | String mobNum2 = "010-1234-5678"; System.out.println("mobile number 2 테스트 결과 ==> " + mobNum2.matches(regExp)); | cs |
구분자로 " - " 를 이용했습니다. 표현식에서 허용한 문자입니다.
위 코드를 실행한 결과는 아래와 같습니다.
Result
mobile number 2 테스트 결과 ==> true
1 2 | String mobNum3 = "010.1234.5678"; System.out.println("mobile number 3 테스트 결과 ==> " + mobNum3.matches(regExp)); | cs |
두번째 예제의 구분자를 " . " 로 변경 했습니다.
위 코드를 실행한 결과는 아래와 같습니다.
Result
mobile number 3 테스트 결과 ==> true
1 2 | String mobNum4 = "0101234-.5678"; System.out.println("mobile number 4 테스트 결과 ==> " + mobNum4.matches(regExp)); | cs |
4 와 5 사이에 " - " 와 " . " 두개를 같이 사용했습니다.
둘다 허용된 문자열이지만 둘중 한개 또는 둘다 오지 않아야 합니다.
위 코드를 실행한 결과는 아래와 같습니다.
Result
mobile number 4 테스트 결과 ==> false
1 2 | String mobNum5 = "110-1234-5678"; System.out.println("mobile number 5 테스트 결과 ==> " + mobNum5.matches(regExp)); | cs |
첫세자리는 01 로 시작을 해야 하는데 110 으로 시작 하는 것으로 지정 했습니다.
당연히 허용되지 않는 패턴입니다.
위 코드를 실행한 결과는 아래와 같습니다.
Result
mobile number 5 테스트 결과 ==> false
숫자 간 구분자 값을 추가 하거나 변경하는 등의 제한하는 표현식을 원하는 방식대로 변경 적용하시면 사용 하는데 불편함이 없을 겁니다.
▼ 도움이 되셨다면 로그인이 필요 없는 ▼
▼ 하트 클릭 한번 부탁 드립니다 ▼
감사합니다 :D