안녕하세요. 제임스 입니다.
이번 포스팅에서는 자바 정규표현식을 이용하여 휴대폰 번호 패턴을 만들어 보겠습니다.
휴대폰 번호 패턴은 생각보다 많이 사용하는 형식이니 기본적인 셋팅과 커스터마이징을 통한 패턴을 저장해 두시면 좋을 것 같습니다.
그럼 시작해 보겠습니다.
■ 정규표현식으로 휴대폰 번호 패턴 만들기
국내 기준으로 휴대폰 번호 패턴을 만들어 보겠습니다.
일반적으로 휴대폰 번호는 세자리로 나뉘어져 있습니다.
첫 세자리는 아래와 같은 번호들이 올수 있습니다.
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
'Java' 카테고리의 다른 글
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 주민등록번호 패턴 만들기 (1549) | 2018.06.29 |
---|---|
[ 자바 코딩 ] Java Regular Expression 정규표현식 - IP 주소 패턴 (1182) | 2018.06.28 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 이메일 주소 패턴 만들기 (471) | 2018.06.22 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 암호 패턴 만들기 (11) | 2018.06.21 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 한글만 허용 (12) | 2018.06.20 |