TIL.54符号化試験-js


出版する
  • プログラマーの質問を見に行きます
  • 質問する
    kakaoに加入した新規開発者neoはkakaoアカウント開発グループに割り当てられ、kakaoサービスに加入したユーザのIDの作成を担当する.ニオへの最初のタスクは,新たに加入したユーザがKakao IDルールに適合しないIDを入力する際に,入力したIDと類似してルールに適合したIDを推薦するプログラムを開発することである.
    次はKakao IDのルール
    IDの長さは3文字または15文字を超えてはいけません.
    IDは小文字、数字、マイナス(-)、アンダースコア()、ピリオド(.)文字のみ使用できます.
    しかし、句号(.)先頭と末尾では使用できませんし、連続して使用することもできません.
    ニオは、新規ユーザが入力したIDがKACO IDルールに適合しているか否かを、以下の7つのステップのシーケンス処理手順により確認し、ルールに適合していない場合は、新規のルールに適合しているIDを推奨する.
    新しいプレイヤーが入力したIDがnew idであれば、
    せいげんじょうけん
    手順1 newidのすべての大文字を対応する小文字に変換します.
    ステップ2 new idでは、小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.
    ステップ3 new idのピリオド(.)1つのポイント(.)に置き換えます.
    ステップ4 new idのピリオド(.)先頭または末尾にある場合は削除します.
    ステップ5 new idが空の文字列の場合、new idに「a」を挿入します.
    ステップ6 new idの長さが16文字を超える場合、new idの最初の15文字以外のすべての他の文字を削除します.
    削除後のピリオド(.)new idの末尾にある場合、終了記号(.)テキストを削除します.
    ステップ7のnew idの長さが2文字未満の場合、new idの長さが3になるまで、new idの最後の文字を最後に繰り返し貼り付けます.
    I/O例
    nreturn"...!@BaT#*..y.abcdefghijklm""bat.y.abcdefghi""z-+.^.""aaa""=.=""z--"
    問題を解く
    // 정규식 표현
    
    function solution(new_id) {
      let answer = new_id
        .toLowerCase()
        .replace(/[^\w-_.]/gi, "") // (1)
        .replace(/\.{2,}/g, ".") // (2)
        .replace(/^\.|\.$/g, "") // (3)
        .replace(/^$/, "a") // (4)
        .slice(0, 15) // (5)
        .replace(/\.$/, ""); // (6)
      let length = answer.length;
      return length > 2 ? answer : answer.padEnd(3, answer[length - 1]); // (7)
    }
    
    // (1)
    // [^abc] --- a또는 b또는 c가 아닌 나머지 문자에 일치(부정)
    // \w --- 63개 문자(word, 영문 대소문자 52개 + 숫자 10개 + _)에 일치
    // 63개문자, -, _, . 가 아닌 나머지 문자를 ""로 대체
    
    // (2)
    // {2,} --- 2개 이상 연속 일치
    // . 이 2개 이상 연속 일치 하면 . 으로 대체
    
    // (3)
    // \ --- 다음에는 이스케이프 문자가 온다.
    // ^ --- 시작지점에서 검색
    // $ --- 라인 끝 지점에서 검색
    // \. 이 앞 또는 뒤 있으면 "" 으로 대체
    
    // (4)
    // 시작, 끝이 없으면 (빈 문자열 이면) "a" 로 대체
    
    // (5)
    // 인덱스 0 부터 15번째까지 갖고 옴 ( 15자리로 자름)
    
    // (6)
    // 마지막이 . 으로 끝나면 "" 로 대체
    
    // (7)
    // 글자수가 3보다 작으면 마지막 문자로 3자리 채워주기