프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
phone_number는 길이 4 이상, 20이하인 문자열입니다.
phone_number | return |
---|---|
"01033334444" | "***4444" |
"027778888" | "*8888" |
function solution(phone_number) {
return phone_number.replace(/\d/g,'*').slice(0,-4) + phone_number.slice(-4)
}
원래는 Replace를 사용해서 깔끔하게 뒤의 4자리를 남기고 앞을 *로 바꿔주고 싶었는데, 정규표현식 공부를 대충 해 뒀다가 어떻게 정규 표현식으로 바꿀지 몰라서 결국 slice()
를 사용해서 따로따로 잘라 줬다. 참고로 slice()
는 string과 array 둘 다의 메소드라서 문자도 자를 수 있고 배열도 자를 수 있다.
이 기회에 정규표현식을 다시 공부했다. 참고는 드림코딩.
그리고 이 사이트에서 정규표현식을 쓰면 간단하게 설명을 해주고 어디가 선택되는지 시각적으로 보여 주므로 참고하기.
function hide_numbers(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
역시 깔끔하게 정규표현식으로 선택하는 방법이 있었다! 기본적으로 정규표현식은 //
안에 찾을 값의 형식을 넣어 준다. /
뒤에 있는 것은 플래그라고 하는데 고급 탐색을 하게 해 준다. 여기서 쓰인 플래그는 g
인데, 일치하는 여러개의 값을 저장하도록 해 준다. 앞부분 //
사이에 있는 것은 찾을 문자열이다. \d
는 숫자를 찾게 해 준다. ?=
는 전방탐색이라고 하는데, =
뒤에 오는 문자를 제외하고 탐색하게 된다. 반드시 괄호 안에 넣어 줘야 한다. {}
는 갯수를 의미한다.
결국, \d
로 숫자 전체를 찾아준 다음, (?=\d{4})
로 4글자의 문자를 제외하고 탐색하라고 명렁을 해 줬다. 그리고 플래그를 g
로 줘서 여러개의 숫자를 저장하도록 해 줬다.
이후에 replace()
에 정규표현식을 할당해 \*
로 바꾸어 주었다.
function hide_numbers(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
return result;
}
나는 replace()
로 앞부분을 *로 바꿔 줬는데, 여기서는 repeat()
함수를 써 줬다. repeat()
은 앞 부부분의 문자를 지정한 수만큼 반복해 준다.
const solution = n => [...n].fill("*",0,n.length-4).join("")
이 풀이는 문자를 [...]
을 이용해 배열로 만들어준 후 *로 만들고 마지막에 배열을 문자로 합쳐 줬다.