Testing if a value is an integer in Javascript
I decided to post this article after doing a Google search for "Javascript is_int()" and "Javascript integer test" on Google.
I got plenty of results back, but each result that I looked at contained a function which don't always work as intended, either because the logic was flawed, or because it won't work with variables which are typed as a string, such as form input values.
Let me explain...
Javascript is_int() function example 1
Some sites proposed a solution which involved doing a pattern matching each for a decimal point in the variable. Something along the lines of this:
function is_int(value){
for (i = 0 ; i < value.length ; i++) {
if ((value.charAt(i) < '0') || (value.charAt(i) > '9')) {return false;}
}
return true;
}
Why this won't work
If I enter 1.00 or 2.00 as my variable, the function will return false, even though the number I entered is in fact an integer.
Javascript is_int() function example 2
Some solutions propose doing a parseInt() on the value, and returning false if this is NaN:
function is_int(value){
return !isNaN(parseInt(value * 1));
}
Why this won't work
Whilst this will work with standard floats and integers, it won't work with string values (for example, form submission data).
Finally: a Javascript is_int() function which WORKS:
If the value of a variable is an integer, then the numeric value of it's parseFloat() and parseInt() equivalents will be the same, so:
function is_int(value){
if((parseFloat(value) == parseInt(value)) && !isNaN(value)){
return true;
} else {
return false;
}
}
NOTE: the above function uses WEAK VARIABLE TYPING - if you need to check is_int() using strong variable typing, just use example 2 instead.
There you go. If you can find fault with me on this, let me know.