[BE] 정규표현식 (Regular Expression) - woowacourse-teams/2021-zzimkkong GitHub Wiki

  • MemberSaveRequestDto에서 비밀번호와 조직명 입력값을 검증하기 위해서 사용

비밀번호

  • (필수) 영어 + 숫자 8자 이상, (선택) 특수문자 입력가능
@NotBlank(message = "비밀번호는 공백일 수 없습니다")
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[0-9]).{8,20}$", message = "비밀번호는 영어와 숫자를 포함해서 8자 이상 20자 이내로 입력해주세요")
private String password;
  • ^ : 문자열의 시작을 나타냄
  • $ : 문자열의 끝을 나타냄
  • ?= : 전방탐색(lookahead)패턴, 일치 영역을 발견해도 그 값을 반환하지 않는 패턴
// 예시
http://www.forta.com
https://mail.forta.com
ftp://ftp.forta.com

// 정규 표현식
.+(?=:)

// 결과
http:
https:
ftp:
  • .* : any character zero or more times
  • [0-9] : 0에서 9까지의 숫자
  • [a-zA-Z] : a에서 z까지의 대소문자 알파벳
  • {8, 20} : 8자에서 20자 사이

조직명

  • 조직명 : 1자 이상, 특수문자 일부 허용([ - , _ , !, ?, ., , ])
@NotBlank(message = "조직명은 공백일 수 없습니다")
@Pattern(regexp = "^[-_!?.,a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ]{1,20}$", message = "조직명은 특수문자(-_!?.,)를 포함하여 20자 이내로 작성 가능합니다")
private String organization;
  • [-_!?.,a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ] : 가능한 특수문자 + 모든 알파벳 + 모든 숫자 + 모든 한글
  • {1, 20} : 1자에서 20자 사이

Regex test site

https://regex101.com/

References

https://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean/22944075#22944075

https://mkyong.com/tutorials/java-regular-expression-tutorials/