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 |
---|
Happy coding,
Sonny