In Classic ASP there is the function isNumeric, which one uses to test if a value is a number. So for example:
Response.write IsNumeric("21") // true Response.write IsNumeric("David") // false
Seems straightforward so far. Then you try this:
Response.write IsNumeric("15447D") // true
Every so often this little quirk would popup. This morning it’s been driving me mad because I had a set of string values that were mixtures of alphanumeric, or numeric values. I wanted to discriminate between numbers and not-numbers and store the values in different columns in a database table. Using isNumeric though kept throwing errors – it tested 15447D as being a number, and of course once I tried to insert that into an integer column an error was thrown.
Finally figured how what’s happening after a little digging online. isNumeric also considers hex values to be valid numbers. 15447D is hex for 1393789. Now the lights go on – only wondered about this for 20 years.
Apparently this is also the case for octal values.
So a custom function along these lines is the answer:
Function myIsNumeric(ByVal Value) Dim regEx Set regEx = New RegExp regEx.pattern = "^(0|[1-9][0-9]*)$" myIsNumeric = Regex.Test(Value) End Function
Filed under: Programming
