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


이번 포스팅에서는 정규표현식을 이용하여 특정 숫자의 범위를 지정하는 방법에 대해 알아 보겠습니다. 

이번 글을 사실 앞서 포스팅한 표현식중에 사용된 적이 있는 방식인데요. 

간단히 설명하듯이 넘어갔기에 이번에 조금 더 정리 하고자 합니다. 



■ 정규표현식으로 숫자 범위 지정 패턴 만들기


로또 많이들 관심을 가지고 있을 것 같습니다. 

로또 번호는 1 ~ 45 까지의 값만 선택 가능합니다. 


이 로또 번호의 범위 1 ~ 45 까지의 숫자만 입력 가능한 패턴을 만들어 보겠습니다. 




숫자를 허용 하는 표현식은 이제 다들 아시리라 생각합니다. 

간단하죠? 


^[0-9]$


위와 같이 작성하면 어떤 숫자든 허용 한다는 의미 입니다. 하지만 딱 한자리 숫자만 체크 합니다. 


만약 입력 값이 한자리 숫자이며 0 ~ 9 사이 값이라면 위 표현식으로도 충분 하지만 지금 만들고자 하는 패턴은 한자리 숫자가 아닌 두자리 숫자로 최대 45 까지만 허용 해야 하는 조건입니다. 


지금부터 하나씩 조건을 맞춰 가보겠습니다.



^[1-9]{1}$

1 ~ 9 까지 한자리 숫를 허용하는 표현식 하나를 완성 시켰습니다. 



^[1-9]{1}$

or 를 의미하는 " | " 값을 이용하여 10 이상 ~ 45 이하를 포함하는 식을 추가 할 표현식을 연결할 준비를 합니다. 



^[1-9]{1}$|^[1-3]{1}[0-9]{1}$

첫번째 자리는 1 ~ 3 까지만 허용하고 두번째 자리는 0 ~ 9 까지 허용하는 표현식을 이용 했습니다. 

즉, 10 ~ 39 까지의 값을 허용 할 수 있는 표현식입니다. 



^[0-9]{1}$|^[1-3]{1}[0-9]{1}$|

or 를 의미하는 " | " 값을 이용하여 남은 40 ~ 45 사이의 값을 포함하는 식을 추가 합니다. 



^[0-9]{1}$|^[1-3]{1}[0-9]{1}$|^4{1}[0-5]{1}$

첫번째 자리는 4만 허용하고 두번째 자리는 0 ~ 5 까지의 숫자를 허용하는 표현식을 추가 했습니다. 

이는 40 ~ 45 까지의 값을 허용 하는 표현식입니다. 



여기까지 이해가 되셨나요? 




이제 샘플 코드를 보시 겠습니다. 


1
String regExp = "^[1-9]{1}$|^[1-3]{1}[0-9]{1}$|^4{1}[0-5]{1}$";
cs


위에서 작성한 최종 표현식을 regExp 로 선언 했습니다. 



1
2
3
4
5
6
7
8
9
String lottoNum1 = "8";
String lottoNum2 = "25";
String lottoNum3 = "45";
String lottoNum4 = "56";
 
System.out.println("lottoNum1 테스트 결과 ==> "+lottoNum1.matches(regExp));
System.out.println("lottoNum2 테스트 결과 ==> "+lottoNum2.matches(regExp));
System.out.println("lottoNum3 테스트 결과 ==> "+lottoNum3.matches(regExp));
System.out.println("lottoNum4 테스트 결과 ==> "+lottoNum4.matches(regExp));
cs


위와 같이 8, 25, 45, 56 등 네가지 값을 작성한 표현식을 이용하여 Validation check 해보겠습니다. 


실행 결과는 아래와 같습니다. 


Results 

lottoNum1 테스트 결과 ==> true

lottoNum2 테스트 결과 ==> true

lottoNum3 테스트 결과 ==> true

lottoNum4 테스트 결과 ==> false



직접 테스트 해보시면 아시겠지만 1 ~ 45 까지의 모든 값을 허용 하고 그 외의 값들은 허용하지 않습니다. 

생각보다 간단하죠? ^^


위와 같은 방법으로 원하는 표현식을 만들 수 있습니다. 




만약 0 ~ 9 사이의 숫자중 5, 6 은 허용하지 않는 다는 표현식을 만든다면 어떻게 하면 될까요? 


^[0-47-9]{1}$


0-4: 0 ~ 4 까지 허용 

7-9: 7 ~ 9 까지 허용

주의 할 점은 4와 7 이 붙어 있다고 하여 47을 의미 하는 것이 아니라 각각의 범위 지정 끝 숫자와 시작 숫자라는 겁니다.



1
String regExp = "^[0-47-9]{1}$";
cs


위 표현식을 이용하여 테스트를 해보겠습니다. 



1
2
3
4
5
String numTest1 = "4";
String numTest2 = "6";
 
System.out.println("numTest1 테스트 결과 ==> "+numTest1.matches(regExp));
System.out.println("numTest2 테스트 결과 ==> "+numTest2.matches(regExp));
cs



실행 결과는 아래와 같습니다. 


Results

numTest1 테스트 결과 ==> true

numTest2 테스트 결과 ==> false




이번 포스팅 내용을 참고 하시면 대부분의 숫자 범위 지정은 무리 없이 하실 수 있을 거라 생각합니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D


블로그 이미지

쉬운코딩이최고

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

,