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:
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("Mon Apr 07 2025 05:15:24 GMT+0000 (Coordinated Universal Time)") | false | false |
isNumber("1/1/2009") | false | false |
Happy coding,
Sonny