이번 팀 프로젝트에서 SNS 앱을 만들기를 하고 있다.
이 앱은 로그인, 회원가입, 마이페이지, 개인정보 수정, 메인페이지, 디테일 페이지로 이루어져있으며, 회원가입이나 개인정보 수정 페이지에서는 비밀번호의 조건을 설정하였다.
조건은 '영어와 숫자를 사용하여 8~16자 이내'의 비밀번호를 입력해야 한다.
이 조건을 정규식으로 작성하기 전에 정규식에 대해 정리해보려 한다.
표현식 | 설명 |
---|---|
^ | 문자열의 시작 |
$ | 문자열의 종료 |
. | 임의의 한 문자 (문자의 종류 가리지 않음, 단, \ 는 넣을 수 없음) |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나있음 |
[] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다. |
{} | 횟수 또는 범위를 나타낸다. |
() | 소괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행할 때 사용 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | 숫자 [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
\ | 정규표현식 역슬래시()는 확장 문자. 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미 |
(?i) | 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음 |
분류 | 정규식 패턴 |
---|---|
숫자 | ^[0-9]*$ |
영문자 | ^[a-zA-Z]*$ |
한글 | ^[가-힣]*$ |
영어&숫자 | ^[a-zA-Z0-9]*$ |
비밀번호 | (숫자, 문자 포함의 6~12자리 이내) ^[A-Za-z0-9]{6,12}$ |
이외에도 많다.
패턴 알아두면 좋지만 이렇게 조건만 선택하면 정규식을 만들어주는 사이트인 regex101이 있다!!
정규식을 사용한 내 코드!!
private fun isPasswordValid(password: String): Boolean {
return !password.contains(" ") && password.matches("^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{8,16}\$".toRegex())
}
이 함수는 Boolean 값을 반환한다.
password는 공백을 포함해서는 안되며, 영어 대/소문자와 숫자만 사용할 수 있게 하였다.
또한 영문과 숫자가 1자씩은 꼭 포함하여 작성하도록 하였다.
[참고 사이트]
'[Kotlin] 정규 표현식(Regular Expression)의 사용법', Medium
'Regex', Kotlin
'[Android] 자바 코틀린 (Pattern, Matcher)정규식을 사용하여 패스워드 조건을 만들어보자', IT Story