The other day I needed to check via javascript if the text entered in a textbox is a valid or not. I know I can use the built-in isNaN function, but wanted to make sure that would in work all the scenarios. So, I searched online, but I found a couple of examples on the web, but they were using regular expression to check. I am not sure why they are using regular expressions, when you have isNaN function.
I created a test function to make sure isNaN works in all the scenarios and found that it works for almost everything I tried except for three values, they are null, empty string and a string with just spaces. For these three inputs, it returns false but you really want it to return true since obviously they are not valid numbers. I wrote an helper function to get around that and the following page shows the helper method as well as the test function I wrote to validate this helper function:
// Checks if a given value is a valid number or not
// The argument could be any of the following:
// a) A number itself
// b) Number in quotes, i.e. number stored as string
// c) Number could be in scientific format
// d) An object
function isNumber(val)
{
// we need to explicitly handle null values
// because isNaN returns false when it should return true
if (null == val) return false;
// if it is an empty string or a string with just spaces
// isNaN returns false, but we really need it to return true
// this expression will remove spaces if the given value is a string type
if (typeof(val) == "string")
val = val.replace(/\s*/g, "");
if (val == "") return false;
return !isNaN(val);
}
// test function to test the isNumber function
function isNumber_Test(val, expResult)
{
var dblQuote = '';
if (typeof(val) == "string")
dblQuote = '"';
var actResult = isNumber(val);
var clr = 'green';
if (actResult != expResult)
clr = 'red';
document.write('
');
document.write('isNumber(' + dblQuote + val + dblQuote + ')');
document.write('' + actResult + '');
document.write('' + expResult + '');
document.write('
');
}
By the way, I am using a Javascript utility called
SyntaxHighlighter, to render this code. If you have not already used this utility, I would highly recommend you check it out.
Here are some test results of isNumber() function:
Test isNumber() Function
Expression | Result | Expected Result |
isNumber(45) | true | true |
isNumber(0.343) | true | true |
isNumber(459.43) | true | true |
isNumber(84540000000) | true | true |
isNumber(0.00012454) | true | true |
isNumber("45") | true | true |
isNumber("0.343") | true | true |
isNumber("459.43") | true | true |
isNumber("8.454E+10") | true | true |
isNumber("12.454E-5") | true | true |
isNumber(null) | false | false |
isNumber("") | false | false |
isNumber(" ") | false | false |
isNumber("abcdef") | false | false |
isNumber(" 454a ") | false | false |
isNumber(" 765 a") | false | false |
isNumber("454a") | false | false |
isNumber("a7565") | false | false |
isNumber("Tue Apr 08 2025 15:12:05 GMT+0000 (Coordinated Universal Time)") | false | false |
isNumber("1/1/2009") | false | false |
Happy coding,
Sonny