문제 파악

해당 문제는 사용자의 아이디를 확인하여 수정하는 문제로, 문자열의 특정 조건을 확인하며, 값을 차례로 수정하는 문제이다.

총 7개의 단계를 거쳐, 사용자의 아이디를 수정해야 하는데 간략하게 작성하면 아래와 같다.

접근 방법

(1) 정규식

해당 문제는 비밀번호 확인에 사용되는 정규 표현식을 사용하는 방법으로 정규표현식의 대표적인 사용 방식들은 아래와 같다.

기호 설명 예제
. 임의의 문자 1개를 의미
^ 시작을 의미한다 []괄호 안에 있다면 일치하지 않는 부정의 의미로 쓰인다. ^a : a로 시작하는 단어, [^a] : a가 아닌 철자인 문자 1개
$ $앞의 문자열로 문자가 끝나는지를 의미한다. a$ : a로 끝나는 단어
[] [] 괄호 안의 문자가 있는지를 확인한다. [ab][cd] : a,b중 한 문자와 c,d중 한 문자 -> ac ad bc bd
[^] [] 대괄호 안에 ^ 문자가 있으면, 제외를 뜻함, 대괄호 안에 ^ 가 쓰이면 제외의 뜻, 대괄호 밖에 ^ 가 쓰이면 시작점의 뜻 [^a-z] : 알파벳 소문자 a부터 z까지를 제외한 모든 문자
- 사이의 문자 혹은 숫자를 의미한다. [a-z] : 알파벳 소문자 a부터 z까지 하나, [a-z0-9] : 알파벳 소문자 전체,0~9 중 한 문자
또는
() 그룹 01(0
{} 개수 a{3}b : a가 3번 온 후 b가 온다→ aab(x), aaab(o), aaaab(o)
\\b 공백, 탭, ",", "/" 등을 의미한다 apple\\b : apple뒤에 공백 탭등이 있다 → apple juice(o), apple.com(x)
\\B \\b의 부정(공백, 탭 등이 아닌 문자) apple\\Bapple.com(o)
\\d 0~9 사이의 숫자, [0-9]와 동일
\\D \\d의 부정(숫자가 아닌 문자), [^0-9]와 동일
\\s 공백, 탭
\\S 공백, 탭이 아닌 문자
\\w 알파벳 대소문자+숫자+"_"[a-zA-Z_0-9]와 동일
\\W \\w의 부정(알파벳 대소문자+숫자+"_" 제외한 문자), [^a-zA-Z_0-9]

https://velog.io/@youngjun_10/자바-정규식Regular-Expression-정리

우리가 확인해야 하는 조건에 맞추어, 정규식을 작성해보면 아래와 같은 요소들로 나눌 수 있다.

  1. 영어 소문자, 숫자, ., _, -를 제외한 문자
public static final String REGEX = "[^a-z0-9._-]";