Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I 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?

like image 606
Electrons_Ahoy Avatar asked Oct 06 '08 19:10

Electrons_Ahoy


People also ask

How do you check if a string is a valid number in C++?

Using built-in method isdigit(), each character of string is checked. If the string character is a number, it will print that string contains int. If string contains character or alphabet, it will print that string does not contain int.

How do I verify a string?

Use String contains() Method to Check if a String Contains Character. Java String's contains() method checks for a particular sequence of characters present within a string. This method returns true if the specified character sequence is present within the string, otherwise, it returns false .

How do you check if a string is a valid number in Python?

Python String isnumeric() MethodThe isnumeric() method returns True if all the characters are numeric (0-9), otherwise False. Exponents, like ² and ¾ are also considered to be numeric values. "-1" and "1.5" are NOT considered numeric values, because all the characters in the string must be numeric, and the - and the .

How do you check if a string is a valid number in JavaScript?

Use the isNaN() Function to Check Whether a Given String Is a Number or Not in JavaScript. The isNaN() function determines whether the given value is a number or an illegal number (Not-a-Number). The function outputs as True for a NaN value and returns False for a valid numeric value.


2 Answers

2nd October 2020: note that many bare-bones approaches are fraught with subtle bugs (eg. whitespace, implicit partial parsing, radix, coercion of arrays etc.) that many of the answers here fail to take into account. The following implementation might work for you, but note that it does not cater for number separators other than the decimal point ".":

function isNumeric(str) {   if (typeof str != "string") return false // we only process strings!     return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...          !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail } 

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 content 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 (This translates to Infinity, which is a number) isNaN('foo')       // true isNaN('10px')      // true isNaN('')          // false isNaN(' ')         // false isNaN(false)       // false 

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')     // 12 parseInt('aaa')    // NaN parseInt('12px')   // 12 parseInt('foo2')   // NaN      These last three may parseInt('12a5')   // 12       be different from what parseInt('0x10')   // 16       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 using another method instead):

+'12.345'          // 12.345 parseInt(12.345)   // 12 parseInt('12.345') // 12 

Empty strings

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

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

But parseInt() does not agree:

parseInt('')       // NaN parseInt('   ')    // NaN 
like image 175
Dan Avatar answered Sep 22 '22 09:09

Dan


If you're just trying to check if a string is a whole number (no decimal places), regex is a good way to go. Other methods such as isNaN are too complicated for something so simple.

function isNumeric(value) {     return /^-?\d+$/.test(value); }  console.log(isNumeric('abcd'));         // false console.log(isNumeric('123a'));         // false console.log(isNumeric('1'));            // true console.log(isNumeric('1234567890'));   // true console.log(isNumeric('-23'));          // true console.log(isNumeric(1234));           // true console.log(isNumeric(1234n));          // true console.log(isNumeric('123.4'));        // false console.log(isNumeric(''));             // false console.log(isNumeric(undefined));      // false console.log(isNumeric(null));           // false 

To only allow positive whole numbers use this:

function isNumeric(value) {     return /^\d+$/.test(value); }  console.log(isNumeric('123'));          // true console.log(isNumeric('-23'));          // false 
like image 30
Gavin Avatar answered Sep 25 '22 09:09

Gavin