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


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

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

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



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


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

로또 번호는 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 등의 프로그래밍 언어를 소개 합니다.

,



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


앞서 정규표현식 (Regular Expression) 에 대해 간단히 정리 했었습니다. 

이번에는 정규표현식 중 숫자만 허용 하는 표현식을 알아 보겠습니다. 




■ 정규표현식 숫자만 허용하기


1
String regExp = "^[0-9]+$";
cs


위와 같이 정규표현식을 작성 했습니다. 


^ => 문자열의 시작

[...] => 문자의 집합, 두 문자 사이에 - 기호를 이용하여 범위를 지정 [0-9] 와 같이 입력하여 0 ~ 9 를 표현 

+ => 앞에 문자가 최소 한개이상 있음, 여기서는 0 ~ 9 사이의 숫자의 갯수 제한이 없음을 의미

$ => 문자열 종료 


다시 정리 하면 아래와 같습니다. 



^[0-9]+$


문자열 시작 

[0 ~ 9 까지 숫자 인정] 

0 ~ 9 까지 숫자 갯수 제한 없음

문자열 종료



위 표현식이 정말 숫자만 허용 하는지 확인 해보겠습니다. 


1
2
3
4
5
6
7
String testStr1 = "12345";
 
if(testStr1.matches(regExp)){
    System.out.println("testStr1 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr1 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr1 이라는 변수에 숫자만 1 ~ 5 까지 나열 되어 있습니다. 

그냥 봐도 숫자만 입력 된 것이 맞죠? ^^


결과는 아래와 같습니다. 

testStr1 ==> 숫자만 입력 됨



1
2
3
4
5
6
7
String testStr2 = "1T2E3S4T5";
 
if(testStr2.matches(regExp)){
    System.out.println("testStr2 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr2 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr2 이라는 변수에는 숫자와 문자의 조합인 값이 들어 있습니다. 


결과는 아래와 같습니다.

testStr2 ==> 숫자 외 다른 문자도 입력 됨



1
2
3
4
5
6
7
String testStr3 = "";
 
if(testStr3.matches(regExp)){
    System.out.println("testStr3 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr3 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


testStr3 이라는 변수는 빈 값으로 설정 했습니다. 


결과는 아래와 같습니다.

testStr3 ==> 숫자 외 다른 문자도 입력 됨




■ 정규표현식 숫자와 공백 허용하기


위 세번째 예제를 사용한 이유는 숫자만 허용하는 표현식을 많이 사용 하기도 하지만 더 많이 사용 하는 것이 숫자와 빈값을 인정하는 표현식을 더 많이 사용하기 때문입니다. 


앞선 숫자만 허용하는 표현식에서는 + 라는 표현식을 이용하여 선행 문자의 갯수를 1개 이상으로 지정 했었습니다. 하지만 이 표현식을 * 로 변경할 경우 선행 문자의 갯수가 0개 이상으로 지정 할 수 있습니다. 


예제를 보시겠습니다. 


1
2
3
4
5
6
7
String regExp2 = "^[0-9]*$";
String testStr4 = "";
if(testStr4.matches(regExp2)){
    System.out.println("testStr4 ==> 숫자만 입력 됨");
}else {
    System.out.println("testStr4 ==> 숫자 외 다른 문자도 입력 됨");
}
cs


regExp2 변수는 0 ~ 9 사이의 숫자가 0개 이상인 것으로 지정 했습니다. 


결과는 아래와 같습니다. 

testStr4 ==> 숫자만 입력 됨



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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,