안녕하세요. 제임스 입니다.
이번 포스팅에서는 정규표현식을 이용하여 특정 숫자의 범위를 지정하는 방법에 대해 알아 보겠습니다.
이번 글을 사실 앞서 포스팅한 표현식중에 사용된 적이 있는 방식인데요.
간단히 설명하듯이 넘어갔기에 이번에 조금 더 정리 하고자 합니다.
■ 정규표현식으로 숫자 범위 지정 패턴 만들기
로또 많이들 관심을 가지고 있을 것 같습니다.
로또 번호는 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
'Java' 카테고리의 다른 글
[ 자바 코딩 ] java substring 으로 문자열 자르기 (3343) | 2021.06.10 |
---|---|
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 문자열 자르기 (split 함수) (1227) | 2018.07.03 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 주민등록번호 패턴 만들기 (1549) | 2018.06.29 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - IP 주소 패턴 (1182) | 2018.06.28 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 휴대폰 번호 패턴 만들기 (1184) | 2018.06.26 |