풀이
김영준
function solution(new_id) { var answer = ""; answer = new_id .toLowerCase() // 대문자를 소문자로 치환 .replace(/[^a-z0-9-_.]/g, "") // 알파벳 소문자, 숫자, -, _, .를 제외한 모든 문자 제거 .replace(/\.{2,}/g, ".") // .이 2번 이상 연속되면 .로 치환 .replace(/^\.|\.$/g, ""); // .이 처음이나 끝에 있으면 제거 if (answer === "") answer = "a"; // 빈 문자열이면 a를 대입 if (answer.length >= 16) answer = answer.substr(0, 15).replace(/^\.|\.$/g, ""); // 길이가 16자 이상이면 첫 15개를 제외한 나머지 문자 제거 while (answer.length < 3) { answer += answer[answer.length - 1]; // 길이가 2자 이하라면 마지막 문자를 길이가 3이 될 때까지 반복해서 붙임 } return answer; }
이종현

코드
// 정규표현식은 봐도봐도 어렵네여...ㅎㅎ // 정규표현식 안쓰고 풀어보려고 하다가 포기하고 검색의 힘을 빌렸습니다. function solution(new_id) { // 1단계: 모든 대문자를 대응되는 소문자로 치환합니다. new_id = new_id.toLowerCase(); // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. new_id = new_id.replace(/[^\w\-\.]/g, ""); // 3단계: 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. new_id = new_id.replace(/\.{2,}/g, "."); // 4단계: 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. new_id = new_id.replace(/^\.|\.$/, ""); // 5단계: 빈 문자열이라면, new_id에 "a"를 대입합니다. if (!new_id.length) new_id = "a"; // 6단계: 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. // 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다. if (new_id.length >= 16) new_id = new_id.slice(0, 15); new_id = new_id.replace(/\.$/, ""); // 7단계: 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다. const length = new_id.length; if (length <= 2) new_id = new_id + new_id[length - 1].repeat(3 - length); return new_id; }
박노철
function solution(new_id) { // 규칙에 맞지 않을떄 유저에게 유사하고 규칙에 맞는 아이디추천 // 길이 3<= <=15; (-, _, . ) 사용 가능 마침표는 처음과 끝에 사용할 수 없고, 연속적으로 사용x //1. 소문자 치환 let id=new_id.toLowerCase(); // 알파벳소문자, 숫자, -,_,. 외는 제외 const reg1=/[^a-z0-9-_.]/g; id=id.replaceAll(reg1, ""); //. 2번 이상이면 1번으로 치환 const reg2=/\.{2,}/g id=id.replaceAll(reg2, "."); console.log(id) //. 처음이나 끝에 나오면 제거 const reg3=/(^\.)|(\.$)/g; id=id.replaceAll(reg3, ""); console.log(id) //빈문자열이면 'a'대입; if(id==="")id+="a"; console.log(id); //길이가 16 이상이면 자르고, if(id.length>=16)id=id.substring(0,15) const reg4=/\.$/g; if(id.match(reg4))id=id.replace(reg4, "") // 길이가 2이하이면 while(id.length<=2){ id+=id[id.length-1]; } return id }
이민희
정규표현식 잘 정리해놓은 포스트 발견했어요!
function solution(new_id) { let answer = new_id.toLowerCase(); // 1단계 answer = answer.replace(/[^a-z0-9-_.]/g, "") // 2단계 .replace(/\.{2,}/g, ".") // 3단계 .replace(/^\.|\.$/g, ""); // 4단계 if (answer === "") answer = 'a'; // 5단계 answer = answer.slice(0, 15) // 6단계, 문자열 길이가 15자보다 적으면 전부 반환합니다. .replace(/\.$/g, ""); // 6단계 while (answer.length <= 2) { // 7단계 answer = answer.concat(answer[answer.length - 1]); } return answer; }
박건우
function solution(new_id) { let answer = new_id.toLowerCase() // 모든 대문자를 소문자로 치환 .replace(/[^a-z0-9-_\.]/g, "") // 알파벳, 숫자, '-', '_', '.' 을 제외한 모든 문자를 제거 .replace(/\.{2,}/g, ".") // '.'이 2번이상 연속된 문자를 '.' 하나로 치환 .replace(/^\.|\.$/g, "") // '.'으로 끝나거나 시작한다면 '.'을 제거 .replace(/^$/, "a") // 빈 문자열이라면 "a" 대입 (이 코드는 다른 분 코드를 참고했어요. 이런 방법이..) .slice(0, 15) // 최대 15자리 문자로 변경 .replace(/\.+$/,""); // '.'으로 끝나지 않도록 연속된 '.' 제거 // 아래 주석은 5, 6 단계를 정규표현식을 사용하지 않고 작성한 것입니다. // 코드가 너무 못생겨져서 최대한 정규표현식으로 바꿔봤어요. // 통과하긴 합니다. //if(!answer.length) answer = "a"; //if(answer.length >= 16) answer = answer.slice(0, 15); //while(answer.endsWith(".")) answer = answer.slice(0, answer.length - 1); while(answer.length <= 2) answer += answer[answer.length - 1]; // 2자리 이하면 끝의 문자를 계속 붙이기 return answer; } // 정규표현식 쓰는법 까먹을때 쯤 풀어보면 좋은 문제에요. // 정규표현식 배워놓으면 문자열 문제 풀때 훠얼씬 편합니다!! // 카카오 같은 경우 외부 검색을 허용합니다.. 정규표현식을 외울 필요는 없는 것 같아요
박주연
//구현은 했지만 코드가 뭔가 더러워서 마음에는 안드네요😢 function solution(new_id) { //1단계(소문자로 치환) let ans = new_id.toLowerCase(); //2단계(소문자,숫자,-_. 만 담기) ans= ans.match(/[a-z0-9-_.]/g).join(''); //3단계(.2번이상 연속되는 부분 .하나로 치환하기) ans = ans.replace(/\.{2,}/g,'.'); //4단계(처음, 끝에 .이 위치한다면 제거하기) ans = ans.replace(/^\.|\.$/g, "") //5단계(빈 문자열일 경우 "a" 대입) if(ans ==="") ans = "a"; //6단계(16자 이상일 경우 15개까지 표현하고 나머지는 제거 + 맨 끝 .은 제거) ans = ans.slice(0,15); ans = ans.replace(/\.$/g, "") //7단계(길이가 2자 이하면 마지막 문자를 끝에 붙이기) while(ans.length <= 2){ ans += ans[ans.length -1] } return ans }