📢 문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
⛔ 제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
const s = "199a23"; //a1234 : false ( 숫자만, legnth는 4,6 )
function solution(s) {
let answer = true;
if (s.length === 4 || s.length === 6) {
// 문자열의 길이가 4 or 6인 경우
for (let i = 0; i < s.length; i++) {
typeof parseInt(s[i]) === "number" && !isNaN(parseInt(s[i]))
? (answer = answer)
: (answer = !answer);
}
return answer;
}
return !answer;
}
console.log(solution(s));
📌 NaN
참고 링크
NaN : Not-A-Number ( 숫자 아님 )
반환하는 연산
1. 숫자로서 읽을 수 없음 (parseInt("어쩌구"), Number(undefined))
2. 결과가 허수인 수학 계산식 (Math.sqrt(-1))
3. 피연산자가 NaN (7 * NaN)
4. 정의할 수 없는 계산식 (0 Infinity)
5. 문자열을 포함하면서 덧셈이 아닌 계산식 ("가" / 3)
📌 NaN 판별
NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않습니다.
NaN의 판별은 Number.isNaN() 또는 isNaN()을 사용하면 제일 분명하게 수행할 수 있습니다.
아니면, 오로지 NaN만이 자기자신과 비교했을 때 같지 않음을 이용할 수도 있습니다.
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
나도 처음에는 정규식으로 작성해보려 했는데, 문법이 틀린건지 자꾸 에러가 나서 남의 코드를 참고 해보려 한다.
function alpha_string46(s) {
let regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
console.log("alpha_string46", alpha_string46("1234"));
📌
let regex = /^\d{6}$|^\d{4}$/;
:
/
~/
: 정규 표현식은 일반적으로 슬래쉬 문자로 감싸진 형태\
:.
,[]
등 특수한 목적으로 사용되는 메타 문자를 문자열에서 찾고 싶을 때, 메타 문자를 문자 그대로 사용할 수 있도록 변환해주는 기호<ㅠㄱ>
.
은 모든 문자와 일치하지만,\.
의 경우,.
의 문자와 일치함\d
: 숫자와 일치함{n}
: 앞에 존재하는 문자가 n번 이상 반복되는 문자와 일치함^
: 대 괄호 사이에 존재 할 때는 부정, 대괄호 밖에선 문자열의 시작과 일치함$
: 문자열의 끝과 일치함|
: or의 의미 , 오른쪽과 왼쪽 패턴중 아무 패턴이나 일치한다면 정규식 일치