Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

오영복

regular expression (정규표현식) 본문

카테고리 없음

regular expression (정규표현식)

오영복 2023. 12. 28. 09:39

regular expression (정규표현식): 프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. 

참조 사이트: Regexper

 

Regexper

 

regexper.com

 

  전화번호검사

String number = "010-1234-5678";

String regex="^01[016-9]-[1-9][0-9]{2,3}-[0-9]{4}$"; // ^시작부분 $끝부분 표현

  이름검사

//참고: 낱자까지 모두 검사하고 싶다면 ^[ㄱ-하-ㅣ가-힣]{2,7}$

String regex ="^[가-힣]{1,2}[가-힣]{1,5}$"; //이름 성씨는 한글로 1또는2글자, 뒤에 이름은1글자에서 5글자사이

  아이디검사

  • 맨 앞자리는 영문 소문자 또는 숫자로 작성
  • 전체 글자수는 5~20자로 설정
  • 나머지 자리는 영문 소문자,숫자,대시,언더바로 구성

String regex ="^[a-z0-9][a-z0-9-_]{4,19}$";// 헷깔릴때 구분지어주려면 역슬래쉬사용 _\-a-z0-9

 

  둘중하나

String greet = "hello Tom";

 

//String regex = "^(hello|hi)$"; //hello 또는 hi만 가능하다

//[]를하면 한자리씩만 검사가능 똑같은 글자 두개 검사 불가 (ex:[hello]->helo)

String regex = "^(hello\\s(Tom|Jerry)||hi\\s(Bob|Jack))$";

\\s :스페이스바(한칸띠우기) \\n 엔터 \\t 텝키 (자바에서 \한번은 인식안되기때문에 \\두개씩입력

 

사용자에게 생년월일을 입력받아서 올바른 형식인지 검사 후 출력

요구사항

  • 연도는 1900 부터 2099년 사이에서 설정 (1900~2099)
  • 월은 1월부터 12월 사이에서 설정 (01~12)
  • 일은 월에 따라 다르긴 하지만 우선 31일로 고정 (01~31)
  • 형식은 YYYY-MM-DD 형태로 대시가 포함된다.

업그레이드

  • 월에 따라 날짜가 다르게 설정되도록 구현(2월은 29일로 가정)
  • 윤년인지 아닌지 프로그램에서 판정하여 정규표현식에 반영

 

String birth = "2021-02-29";

//어떻게 birth의 앞 네자리를 뽑아서 정수로 바꿔서 year에 넣을 수 있을까?

String yearPart = birth.substring(0, 4);  // substring() :0부터 4까지의 문자를 자른다

//윤년 계산은 프로그래밍 코드로 진행

int year = Integer.parseInt(yearPart); // parsenInt : int를 글자로 바꿔줌

boolean isLeap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);

//윤년인지 여부에 따라 검사식의 마지막 날짜를 구해서 적용

int number;

if(isLeap) {

number = 9; }

else {

number = 8;

}

String regex = "^(19[0-9]{2}|20[0-9]{2})-(02-(0[1-9]|1[0-9]|2[0-"+number+"])|(0[469]|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(0[13578]|1[02])-(0[1-9]|1[0-9]|2[0-9]|3[01]))$";

if(birth.matches(regex)) {

System.out.println("생년월일 설정 완료"); }

else {

System.out.println("잘못된 날짜 형식입니다");

}

}

}