문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
| s | return |
|---|---|
| "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번 반복됨