본문 바로가기

개발관련/웹개발

[자바] 정규표현식 예제1


'실용주의 프로그래머를 위한 단위테스트' 라는 책을 보고 있는중에
5장에서 테스트를 위해서 실제로 해봐야 된다며
연습문제들이 잔뜩 나와있는데,
거기서 진도를 못빼고 있다.

팩스스케줄러라는 제목의 문제인데 테스팅을 위한 문제이건만
풀기위한 아이디어로 정규표현식이 생각나서 정규표현식으로 작성한 코드를 여기에 올린다.

문제 : 팩스 스케줄러
이 코드는 지정된 이름의 파일을 어떤 미국 전화번호로 팩스 전송한다.
요구사항으로 입력 유효성 검증이 있다. 지역 코드를 포함한 미국의 전화번호는
xnn-nnn-nnnn 형식이 되어야 하고,
x는 [2~9]범위에 있는 한 자리 정수여야 하며,
n은 [0~9]범위의 수가 될 수 있다.
x11, x9n, 37n, 96n은 현재 유효하지 않은, 사용이 유보된 지역 코드다.

아래는 메서드의 시그네쳐코드이다

public boolean sendFax(String phone, String filename) throws MissingOrBadFileException, PhoneFormatException, PhoneAreaCodeException
풀이를 위해 만든 코드는 아래와 같다.

//regex 전화번호 형식 맞추기
//regex2 지역번호 형식 맞추기
  
  String regex = "[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}";
  String regex2 = "[2-9]11|[2-9]9[0-9]|37[0-9]|96[0-9]";
  
  /**
   * 전화번호는 xnn-nnn-nnnn형식이 되어야 한다.
   * 지역번호중 x11, x9n, 96n 형식은 사용되어서는 안된다.
   * x는 2부터 9까지의 숫자를 의미한다.
   * n은 0부터 9까지의 숫자를 의마한다.
   */
  
  /**
   * 지역코드중 211 ~ 911, 290,291,999, 960, 969는 PhoneAreaCodeException을 일으켜야한다.
   * 전화번호 형식에 맞지않는경우 PhoneFormatException을 발생시킨다.
   * null인 전화번호는 PhoneFormException을 발생시킨다.
   */
  
  String txt = "112-654-6576";
  String txt2 = txt.split("-")[0];
  
  if(txt.matches(regex)&& txt2.matches(regex2)){
   System.out.println("SUCCESS!!");
  }else{
   System.out.println("FAIL!!");
  }

정규식설명은 다른곳에 찾아보면 많이 있으니 다른곳을 참고하시길~^^