Lv.1 - 문자열 다루기 기본

송철진·2023년 1월 21일
0
post-custom-banner

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

입출력 예

sreturn
"a234"falseㅍ
"1234"true

나의 코드

function solution(s) {
    return s.match(/^\d{4}$|^\d{6}$/) === null ? false : true
}

풀이

정규표현식을 사용한 풀이

아래와 같은 오답을 거쳐

s.match(/^\d{4|6}$/) === null		// ❌
s.match(/^\d{4||6}$/) === null		// ❌
s.match(/^\d{4}|\d{6}$/) === null	// ❌
s.match(/^\d{4}||\d{6}$/) === null // ❌

도저히 모르겠어서 이렇게 구현했었다.

s.match(/^\d{4}$/) === null || s.match(/^\d{6}$/) === null 

알고보니 |(OR)로 반복횟수가 4일 경우와 6일 경우를 구분했으므로
각각의 경우에 대해 ^,$를 앞, 뒤에 붙여야 했다.
정규식에 좀더 익숙해지도록 하자

str.match() 메서드는 매개변수로 정규식 개체 Regexp를 받는다
RegExp가 아닌 객체 obj가 전달되면, new RegExp(obj)를 사용하여 암묵적으로 RegExp로 변환된다.

  • 매개변수 없이 match()를 사용하면, [""]를 반환한다
  • 문자열 str이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 하는 Array를 반환한다
  • 일치하는 것이 없으면 null을 반환한다.

정규표현식, 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()test() 메서드를 사용할 수 있다.

  • String의 match(), matchAll() (en-US), replace(), replaceAll() (en-US), search(), split() 메서드와 함께 사용할 수 있다
  • ^ : 문자열의 시작
  • $ : 문자열의 끝
  • | : 또는
  • \d : 숫자(digit), [0-9]와 동일하다
  • x{n} : x가 n번 반복됨

참고

정규표현식 (Regex) 정리

profile
검색하고 기록하며 학습하는 백엔드 개발자
post-custom-banner

0개의 댓글