https://programmers.co.kr/learn/courses/30/lessons/72410?language=javascript
// me
// 단순 문자열 메소드 사용 테스트인데, 기본적인 내용을 너무 많이 까먹음..! 정규식!!, 메소드의 return값(새로운 문자열)
function solution(new_id) {
let answer = '';
// step1
answer = new_id.toLowerCase();
console.log( "1", answer);
// step2 - escape 정규식 조건 오래..
const regex = /[~!@#$%^&*()=+[{\]}:?,<>\/]/gm;
answer = answer.replace(regex, '');
console.log( "2", answer);
// step3 - 연속숫자 정규식..! replace는 새 문자열 반환 - 막힘.. if문에 else빼먹음..
let newStr = answer[0];
for(let i=0; i<answer.length-1; i++){
if (answer[i] === '.'){
if(answer[i+1] === answer[i]){
newStr = newStr + '';
} else {
newStr = newStr + answer[i+1]
}
} else {
newStr = newStr + answer[i+1]
}
}
console.log("3", newStr);
// step4
if(newStr[0] === '.') {
newStr = newStr.substring(1);
}
if(newStr[newStr.length-1] === '.'){
newStr = newStr.substring(0, newStr.length-1);
}
console.log("4", newStr);
// step5
if (newStr.length === 0) {
newStr = 'a';
}
console.log("5", newStr);
// step6
if (newStr.length >= 16) {
newStr = newStr.substring(0, 15);
}
if (newStr[newStr.length-1] === '.'){ // 반복 필요? -> 이전에 연속 삭제해서 반복 불필요
newStr = newStr.substring(0, newStr.length-1);
}
console.log("6", newStr);
// step7 - 간단한것 같은데 왜?
if(newStr.length <=2){
const repeatStr = newStr[newStr.length-1];
while(newStr.length !== 3){
newStr = newStr + repeatStr;
}
}
console.log("7", newStr);
return newStr;
}
// best
// 간.결. 정규식!!!!
function solution(new_id) {
const answer = new_id
.toLowerCase() // 1
.replace(/[^\w-_.]/g, '') // 2
.replace(/\.+/g, '.') // 3
.replace(/^\.|\.$/g, '') // 4
.replace(/^$/, 'a') // 5
.slice(0, 15).replace(/\.$/, ''); // 6
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}