안녕하세요. 제임스 입니다. 


이번 포스팅에서는 자바 정규표현식을 이용하여 휴대폰 번호 패턴을 만들어 보겠습니다. 

휴대폰 번호 패턴은 생각보다 많이 사용하는 형식이니 기본적인 셋팅과 커스터마이징을 통한 패턴을 저장해 두시면 좋을 것 같습니다. 


그럼 시작해 보겠습니다. 




■ 정규표현식으로 휴대폰 번호 패턴 만들기


국내 기준으로 휴대폰 번호 패턴을 만들어 보겠습니다. 


일반적으로 휴대폰 번호는 세자리로 나뉘어져 있습니다.


첫 세자리는 아래와 같은 번호들이 올수 있습니다. 


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})$

마지막은 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



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,