Problem | 신규 아이디 추천
function solution(new_id) {
var answer = "";
// 1. 소문자 => 대문자로 변경
if (/[A-Z]/g.test(new_id)) new_id = new_id.toLowerCase();
// 2. 특수 문제 빼기
new_id = new_id.replace(/[^a-z0-9-_.$]/g, "");
// 3. 두번 이상 마침표 => . 으로 대체
new_id = new_id.replace(/\.{2,}/g, ".");
// 4. 마침표가 처음이나 끝에 위치한다면 제거
new_id = new_id.replace(/^\.|| \.$/g, "");
// 5. 빈 문자열이면 a를 대입
new_id = new_id.replace(" ", "a");
// 6. 16자리면 15자리만
if (new_id.length >= 16) new_id = new_id.substring(0, 15);
if (/\.$/.test(new_id)) new_id = new_id.substring(0, new_id.length - 1);
if (new_id.length <= 2) {
if (new_id.length === 0) new_id = "aaa";
else new_id += new_id[new_id.length - 1].repeat(3 - new_id.length);
}
answer = new_id;
return answer;
}
문제점과 변경사항,
매개변수로 받은 것을 계속 바꿨다. -> answer이 있음에도 왜 굳이?
if else 문 대신 , 삼항연산자 사용으로 코드를 깔끔하게 바꿨다.
function Recommend_id(new_id) {
var answer = '';
answer = new_id
.replace(/[A-Z]/g, upper => upper.toLowerCase())
.replace(/[^\w-.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.replace(/^$/, 'a')
.slice(0, 15)
.replace(/\.$/g, '');
answer.length <= 2 ? (answer += answer[answer.length - 1].repeat(3 - answer.length)) : false;
return answer;
}
알고리즘 풀 때 정규식이 편하다는 것은 알지만,
최소한 나에게는 가독성이 너무 떨어진다. ( 정규식을 몰라서 그런 것일 수도 있겠다. ) 정규식이 가독성이 좋은지 안좋은지는 월요일 강사님한테 물어보고 추가 해야겠다.