자바스크립트에서 숫자 체크는 정규식, isNaN, jQuery 등 여러가지 방법이 있습니다.
아래에 코드와 테스트한 결과를 올려놓았으니 본인이 원하는 상황에 맞게 사용하세요.
자바스크립트에서 isNaN 은 숫자가 아닌 값을 찾는 함수입니다.
isNaN ( value ) 의 value가 숫자가 아니라면 true, 숫자라면 false라는건데..원하는대로 나올까요?
숫자가 true로 반환하려면 반대로 해야겠죠? !isNaN( value )로 테스트 해봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | !isNaN( "-10" ) // !isNaN( "+10" ) // !isNaN( "0" ) // !isNaN( "0xFF" ) // !isNaN( "8e5" ) // !isNaN( "3.1415" ) // !isNaN( "0144" ) // !isNaN( ".423" ) // !isNaN( "" ) // !isNaN( "432,000" ) // !isNaN( "23,223.002" ) // !isNaN( "3,23,423" ) // !isNaN( "-0x42" ) // !isNaN( "7.2acdgs" ) // !isNaN( {} ) // !isNaN( NaN ) // !isNaN( null ) // !isNaN( true ) // !isNaN( false ) // !isNaN( Infinity ) // !isNaN( undefined ) // |
이건 누구든 원하는 결과가 아니죠?
"", null, true, false, Infinity 등 이런 값은 숫자가 아닌데 숫자라고 체크되네요.
이건 사용하지 말아야겠습니다.
jQuery에서 제공하고 있는 유틸리티 중에 하나인 jQuery.isNumeric() 에 대해 알아봅시다.
자세한 사항은 http://api.jquery.com/jQuery.isNumeric/ 에서 확인해 보세요.
$.isNumeric( value ) 의 value가 숫자인지 체크해서 boolean(true or false)값으로 반환합니다.
그러면 어떤 값이 숫자형인 true로 반환되고, 어떤 값이 숫자 아닌 false로 반환되는지 테스트해봤습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $.isNumeric( "-10" ) // $.isNumeric( "+10" ) // $.isNumeric( "0" ) // $.isNumeric( "0xFF" ) // $.isNumeric( "8e5" ) // $.isNumeric( "3.1415" ) // $.isNumeric( "0144" ) // $.isNumeric( ".423" ) // $.isNumeric( "" ) // $.isNumeric( "432,000" ) // $.isNumeric( "23,223.002" ) // $.isNumeric( "3,23,423" ) // $.isNumeric( "-0x42" ) // $.isNumeric( "7.2acdgs" ) // $.isNumeric( {} ) // $.isNumeric( NaN ) // $.isNumeric( null ) // $.isNumeric( true ) // $.isNumeric( false ) // $.isNumeric( Infinity ) // $.isNumeric( undefined ) // |
위 테스트 결과를 보시면, 16진수, 10진수 모두 체크하여 true 값을 반환해줍니다.
isNaN에서 있던 오류는 없어서 숫자형 체크에는 참 편리하게 사용할 수 있겠네요.
그런데, 만약에 숫자를 체크할때 숫자 단위 기호가 있는 432,000 를 true로 반환하고 싶거나,
10진수만을 true로 반환하고 싶을때도 있겠죠. 다음을 보시죠.
자바스크립트 정규식(RegExp)을 사용해서 함수를 만들어 봅시다.
일단 10진수를 체크하려면 여러 경우가 있는데요
양수/음수기호(+,-), 자릿수구분기호(12,000), 소수점(1.14159) 사용 여부를 선택해야합니다.
아래 주석을 보고 상황에 맞는 정규식을 사용하세요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function isNumeric(num, opt){ // 좌우 trim(공백제거)을 해준다. num = String(num).replace(/^\s+|\s+$/g, "" ); if ( typeof opt == "undefined" || opt == "1" ){ // 모든 10진수 (부호 선택, 자릿수구분기호 선택, 소수점 선택) var regex = /^[+\-]?(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+){1}(\.[0-9]+)?$/g; } else if (opt == "2" ){ // 부호 미사용, 자릿수구분기호 선택, 소수점 선택 var regex = /^(([1-9][0-9]{0,2}(,[0-9]{3})*)|[0-9]+){1}(\.[0-9]+)?$/g; } else if (opt == "3" ){ // 부호 미사용, 자릿수구분기호 미사용, 소수점 선택 var regex = /^[0-9]+(\.[0-9]+)?$/g; } else { // only 숫자만(부호 미사용, 자릿수구분기호 미사용, 소수점 미사용) var regex = /^[0-9]$/g; } if ( regex.test(num) ){ num = num.replace(/,/g, "" ); return isNaN(num) ? false : true ; } else { return false ; } } |
아래 결과입니다.
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 | isNumeric( "-10" ) // isNumeric( "+10" ) // isNumeric( "-10" , 2 ) // isNumeric( "+10" , 2 ) // isNumeric( "0" ) // isNumeric( "0xFF" ) // isNumeric( "8e5" ) // isNumeric( "3.1415" ) // isNumeric( "3.1415" , 4 ) // isNumeric( "0144" ) // isNumeric( ".423" ) // isNumeric( "" ) // isNumeric( "432,000" ) // isNumeric( "432,000" , 3 ) // isNumeric( "23,223.002" ) // isNumeric( "3,23,423" ) // isNumeric( "-0x42" ) // isNumeric( "7.2acdgs" ) // isNumeric( {} ) // isNumeric( NaN ) // isNumeric( null ) // isNumeric( true ) // isNumeric( false ) // isNumeric( Infinity ) // isNumeric( undefined ) // |
위 예제에 없는 정규식이 필요하시면 댓글남겨주시면 답변드리겠습니다. 좋은 하루 되세요 ^^
출처 - http://sometimes-n.tistory.com/34
'Develop > HTML & JavaScript & CSS' 카테고리의 다른 글
콤마 (0) | 2016.11.08 |
---|---|
공백, 줄바꿈 등 제거 (0) | 2016.11.08 |
자바스크립트에서 REPLACE를 REPLACEALL 처럼 사용하기 (0) | 2016.11.08 |
==과 ===의 차이점 (0) | 2016.10.24 |
[SelectBox] Control 제어 (0) | 2016.09.19 |