Electrons_Ahoy - 23 days ago 4x
Javascript Question

Is there a (built-in) way in JavaScript to check if a string is a valid number?

I'm hoping there's something in the same conceptual space as the old VB6 IsNumeric() function?

To check if a variable (including a string) is a number, check if it is not a number:

This works regardless of whether the variable contains is a string or number.

``````isNaN(num)     // returns true if the variable does NOT contain a valid number
``````

Examples:

``````isNaN(123)       // false
isNaN('123')     // false
isNaN('1e10000') // false  (number is Infinity)
isNaN('foo')     // true
isNaN('10px')    // true
``````

Of course, you can negate this if you need to. For example, to implement the `IsNumeric` example you gave:

``````function isNumeric(num){
return !isNaN(num)
}
``````

To convert a string containing a number into a number:

only works if the string only contains numeric characters, else it returns `NaN`.

``````+num              // returns the numeric value of the string, or NaN if the
// string isn't purely numeric characters
``````

Examples:

``````+'12'             // 12
+'12.'            // 12
+'12..'           // Nan
+'.12'            // 0.12
+'..12'           // Nan
+'foo'            // NaN
+'12px'           // NaN
``````

To convert a string loosely to a number

useful for converting '12px' to 12, for example.

``````parseInt(num)     // extracts a numeric value from the
// start of the string, or NaN.
``````

Examples:

``````parseInt('12', 10)    // 12
parseInt('aaa', 10)   // NaN
parseInt('12px', 10)  // 12
parseInt('foo2', 10)  // NaN      These last two may be different
parseInt('12a5', 10)  // 12       from what you expected to see.
``````

Floats

Bear in mind that, unlike `+num`, `parseInt` (as the name suggests) will convert a float into an integer by chopping off everything following the decimal point (if you want to use `parseInt()` because of this behaviour, you're probably better off with `Math.floor()` instead):

``````parseInt(12.345, 10)   // 12
parseInt('12.345', 10) // 12
+'12.345'          // 12.345
``````

Empty strings

Empty strings may be a little counter-intuitive. `+num` converts empty strings to zero, and `isNaN()` assumes the same:

``````+''                // 0
isNaN('')          // false
``````

But `parseInt()` does not agree:

``````parseInt('', 10)       // NaN
``````