문자열 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번 반복됨