^ : 시작
$ : 종료
[범위] : 문자 범위 (범위에 해당하는 문자 하나)
. : 문자 (공백, 숫자, 영문, 특문 등 의 문자 하나)
(?= ) : 긍정형 전방탐색 (positive lookahead) ; 일치하는 문자가 있으면 값이 아닌 인덱스를 반환
문자 길이
? : 0 또는 1회
* : 0회 이상
+ : 1회 이상
{n} : n회
{n, } : n회 이상
{n, m} : n회 이상, m회 이하
@NotBlank
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{10,20}$|^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{10,20}$|^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*]{10,20}$",
message = "10~20 자리 이내 영문, 숫자, 특수문자 중 2종류 이상 조합")
private String password;
()는 조건문으로 검사를 통과하면 인덱스를 반환하고 통과하지 못하면 매칭 실패처리가 됨
(?=.*[])는 []내부에 있는 문자의 인덱스를 0으로 반환함
|는 or과 같은 역할
조건문 뒤의 []{10,20]은 조건문이 10자-20자이며, []내부의 문자로 이루어져야 한다는 것을 의미함
각 조건의 시작과 끝의 ^$를 통해 조건에 완전히 일치할때만 통과하도록 설정함