카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다.
다음은 카카오 아이디의 규칙입니다.
"네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력한 아이디가 카카오 아이디 규칙에 맞는 지 검사하고 규칙에 맞지 않은 경우 규칙에 맞는 새로운 아이디를 추천해 주려고 합니다. 신규 유저가 입력한 아이디가 new_id 라고 한다면,
[문제]
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.
[제한사항]
newid는 길이 1 이상 1,000 이하인 문자열입니다.
new_id는 알파벳 대문자, 알파벳 소문자, 숫자, 특수문자로 구성되어 있습니다.
new_id에 나타날 수 있는 특수문자는 -.~!@#$%^&*()=+[{]}:?,<>/ 로 한정됩니다.
- str.replace(pattern,교체값) : 어떤 패턴에 일치하는 부분을 두번째 인자로 교체한다. 패턴은 정규식 또는 문자열로 줄 수 있다.
- str.slice(start,end) : 문자를 start인덱스부터 end-1인덱스까지 자른 새로운 문자열을 만든다.
- str.charAt(index) : 해당 인덱스 위치에 있는 문자열을 반환
- str.repeat(count) : 문자열을 주어진 횟수만큼 반복해 붙힌 새로운 문자열을 반환
\w : word, 문자
[^] : [ ] 내의 조건들을 부정(제외).
{m,n} : m회 이상,n회 이하 반복되는. n을 주지 않으면 m회 이상의 조건만 걸림.
| : or(또는)
^ : 문자열의 시작
$ : 문자열의 끝
function solution(new_id) {
let answer = new_id
.toLowerCase()
.replace(/[^\w-_.]/g, '') //word(\w),-,_,.을 제외한(^) 모든(g)문자를 ''로 치환(=제거)
.replace(/\.{2,}/g, '.')// .이 2개이상{2,}으로 연속되는 모든 문자를 '.'으로 치환
.replace(/^\.|\.$/g,'')//마침표가 처음이나 끝에 있으면 제거, or == |
.replace(/^$/,'a') //시작(^)과 끝($)만 존재하면 빈문자열, 'a'로 치환
.slice(0,15).replace(/\.$/,'') //slice로 16개를 자른다. 자른 문자의 마지막이 .이면(\.$) 없앤다.
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len); //answer가 이하라면 문자열 마지막에 위치한 문자를 charAt()으로 받아와, repeat()으로 주어진 횟수만큼 반복해 붙힌다.
}
[코드 출처]
https://velog.io/@leeeunbin/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C-JavaScript
[참고 자료]
https://curryyou.tistory.com/208