일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 어댑터패턴
- MajorGC
- spring boot
- 유스콘
- 윈도우11 바로가기
- test double
- java병렬처리
- Java
- 윈도우11 아이폰 메모 앱
- 멀티코어 프로그래밍
- 스프링부트 프로젝트 이름 변경
- 개발컨퍼런스
- js숫자체크
- refelction API
- 테스트대역
- 인텔리제이에서 프로젝트 이름 바꾸기
- GOF
- @advice
- reflection api
- MappingJackson2HttpMessageConverter
- MinorGC
- 클린아키텍처
- Spring
- 윈도우11 icloud 메모
- 동시요청
- java 멀티스레딩
- 자바디자인패턴
- 헥사고날
- mustache함수
- 테스트더블
- Today
- Total
져니의 개발 정원 가꾸기
[Javascript] 문자열 숫자 체크 - isNaN ,Number, 정규식(주의사항) 본문
[Javascript] 문자열 숫자 체크 - isNaN ,Number, 정규식(주의사항)
전전쪄니 2022. 12. 31. 22:45js로 숫자를 체크할 수 있는 방법은 다양하다.
isNan() 함수나 Number 객체 혹은 정규식을 사용한 패턴매칭 등 다양한 방법으로 숫자를 체크할 수 있다.
그 중에서 IsNan()과 Number객체를 사용하는 방법과 주의사항에 대해 정리해본다.
1. isNaN()
javaScript에서 문자열이 숫자인지 체크하기 위한 내장함수이다. 인자가 숫자가 아닐 경우 true, 숫자인 경우 false를 반환한다. 이를 거꾸로 적용하여 !isNan()을 하면 숫자일 경우 true, 아닐 경우 false를 반환하는 방식으로 숫자를 체크하는 방식이다.
그러나 isNaN()함수가 undefined, {}, [], null, '',' ', true, false, [], new Date()에 대해서는 false를 반환한다. 즉, 이 케이스의 경우 !isNaN()함수가 true를 반환한다는 말이다.
문자열에 대해서는 숫자를 판별하기 용이 하지만 다른 타입이나 empty content에 대해서는 가려내지 못한다.
See the Pen 숫자체크 by jihyunPark (@jihyunhillpark) on CodePen.
<주의 사항>
문자열이 아닌 다른 타입 혹은 '', ' ', null 과 같이 empty인 경우 따로 처리해줘야 한다.
2. Number
Number는 js의 내장 객체로 Number(value)를 호출하면 문자열이나 다른 값을 Number 타입으로 변환한다. 만약 변환할 수 없으면 NaN을 반환한다.
Number(value) 앞에 !!을 붙이면 true/false 값을 얻을 수 있는데, 대부분의 블로그에서는 true면 숫자, false면 숫자 아닌 것으로 숫자 체크를 한다고 한다.
See the Pen 숫자체크2 by jihyunPark (@jihyunhillpark) on CodePen.
그런데 과연 !!Number(value)의 값은 완벽하게 숫자를 판별할 수 있을까?
정답을 X다.
Number(value) -> !Number(value) -> !!Number(value) 순으로 따라가 보자.
See the Pen 숫자체크3 by jihyunPark (@jihyunhillpark) on CodePen.
Number(value)
value가 숫자인 경우 - value가 나옴
value가 숫자가 아닌 경우 - NaN이 나옴
!Number(value)
value가 0이 아닌 숫자인 경우 - false
value가 0인 경우 - true
value가 숫자가 아닌 경우 - true
!!Number(value)
value가 0이 아닌 숫자인 경우 - true
value가 0인 경우 - false
value가 숫자가 아닌 경우 - false
<주의 사항>
보다시피 '0'은 인자가 숫자로 변환되는 되지만 !!Number('0')은 false를 반환하고 있다.
0까지 제대로 점검하기 위해서는 이를 체크하는 조건에 추가해줘야 한다.
ex)
function isNum(value) {
return !!Number(value) || '0' === value;
}
3. 정규식
숫자 패턴만 허용하는 정규식을 적용할 경우 다른 예외 사항을 고려하지 않고 숫자인지를 체크할 수 있다.
아래는 숫자만! (즉, 0과 양의정수) 나타나는지를 체크하는 예시이다.
음의 정수, 그냥 숫자가 포함됐지는 정규식을 또 다르게 응용해서 적용해보면 된다. (아래 예시에서 조금씩만 변형해보면 된다 ^^)
See the Pen 숫자만 정규식 by jihyunPark (@jihyunhillpark) on CodePen.
정리 및 사견
예외 조건들을 생각하지 않고 깔끔하게 처리하는 방법은 결국 패턴매칭이 아닌가 싶다.
추가
Number() 와 parseInt()의 차이점에 대한 글을 다음 블로그를 참고해보길 바란다.
https://hianna.tistory.com/706
<참고>
https://hianna.tistory.com/385
https://codechacha.com/ko/javascript-check-if-val-is-number/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number
'개발노트 > JavaScript | Mustache' 카테고리의 다른 글
(JavaScript) window.open()로 도메인이 다른 창을 열었을 때 발생하는 CORS 문제 - postMessage를 사용하자. (0) | 2024.03.17 |
---|---|
[Javascript] String 에서 Object, Object에서 String (0) | 2022.12.31 |
[Mustache] 은근 까먹는 Mustache 문법 (생각나는대로 업데이트) (0) | 2022.12.31 |