TIL DAY 14 || RegEx Email, Password Validation

TK·2021년 3월 4일
1

TIL

목록 보기
19/55

정규표현식 RegEx 는 강력하다. 아주 복잡한 코드를 매우 간단하게 바꿀 수 있는 정규표현식은 다양한 분야에서 사용된다.

인스타그램 클론을 하는 중에 이메일과 비밀번호를 validate 하는 작업이 필요해서, 정규표현식을 사용해보기로 했다.

정규표현식 문법은 봐도봐도 헷갈리고 익숙해져야 하기 때문에 우선 email 을 RegEx 로 검증하면서 사용하는 표현식부터 익혀보기로 했다.

Email Validation

p_email = re.compile(r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9_-]+\.[a-zA-Z-.]+$')

자신이 만든 기준 표현식을 compile 해준 뒤으로match 또는 search 로 어떤 값이 기준 표현식에 맞는지 아닌지 검증하는 방식이다.

우선 처음부터 보자.

  • compile 뒤 string 앞에 r 을 붙여줘서 다음 string 이 정규표현식이라는 것을 알려준다.

^[a-zA-Z0-9+-_.]+
1. ^[]: 괄호안의 표현식이 비교대상과 처음 시작하는 부분부터 일치한다는 의미
2. a-z : 소문자
3. A-Z : 대문자
4. 0-9 : 0부터 9까지의 숫자
5. +-_. : + 부터 _ 까지 일치시키고 . 도 일치시킨다는 의미이다.
6. + : + 전에 나오는 문자가 최소 1개 이상이어야 한다는 의미
7. * : 이건 예시에 없지만 + 와 비교했을 때 + 는 앞에 나오는 문자가 최소 1개여야 하지만, * 는 0개부터이다. 즉 오든 말든 다 일치시킨다는 뜻이다.

그래서 앞 부분을 해석하면,

  • 앞 부분의 소문자, 대문자, 숫자 및 기호 .+_- 를 일치시킨다
  • 그런데 + 로 인해 그렇게 앞에서 일치되는 부분이 최소 1개 이상 있어야 한다.

@gmail.com 은 안되고 a@gmail.com 처럼 최소 계정명이 1개 이상이어야 한다.

이제 뒷 부분을 확인해보자.

@[a-zA-Z0-9_]+\.[a-zA-Z-.]+$
1. @ : @ 과 매칭해야한다는 뜻이다. 즉 @ 이 꼭 와줘야 한다.
2. [a-zA-Z0-9_-]+ : @ 뒤부터 최소 1개의 문자가 블럭 안의 표현식과 매칭해야 한다는 의미이다.
3. \. : 문자. 을 나타내기 위해 \ 백슬래시를 사용한다. 그냥 . 을 적으면 모든 문자열을 매칭하기때문에 구분해서 사용해줘야 한다.
4. [a-zA-Z-.]+$ : $ 때문에 블럭안의 표현식과 비교하려는 대상이 꼭 마지막에 매칭돼야 한다.

다음은 이메일 매칭 결과이다.

Password Validation

패스워드는 좀 더 복잡하기 때문에 나중에 블로깅 할 예정이다.
그래도 임시방편으로 아주 간단하게 우선 8 자 이상인 문자열만 매칭시키려고 했다.

len 을 써서 할 수도 있지만 우선 정규표현식을 공부해보기 위해 작성해보았다.

8자리 이상 45자리 이하인 문자열은
.{8,45}
이렇게 표현하면 된다.
1. . : 모든 문자열과의 매칭을 의미하고
2. {m, n} : 앞 표현식의 m 이상 n 이하의 반복을 의미한다.

profile
Backend Developer

0개의 댓글