[ 자바 코딩 ] Java Regular Expression 정규표현식 - 로또 번호 패턴 만들기
안녕하세요. 제임스 입니다.
이번 포스팅에서는 정규표현식을 이용하여 특정 숫자의 범위를 지정하는 방법에 대해 알아 보겠습니다.
이번 글을 사실 앞서 포스팅한 표현식중에 사용된 적이 있는 방식인데요.
간단히 설명하듯이 넘어갔기에 이번에 조금 더 정리 하고자 합니다.
■ 정규표현식으로 숫자 범위 지정 패턴 만들기
로또 많이들 관심을 가지고 있을 것 같습니다.
로또 번호는 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