Consider a non-DOM scenario where you'd want to remove all non-numeric characters from a string using JavaScript/ECMAScript. Any characters that are in range 0 - 9
should be kept.
var myString = 'abc123.8<blah>';
//desired output is 1238
How would you achieve this in plain JavaScript? Please remember this is a non-DOM scenario, so jQuery and other solutions involving browser and keypress events aren't suitable.
Use the string's .replace
method with a regex of \D
, which is a shorthand character class that matches all non-digits:
myString = myString.replace(/\D/g,'');
If you need this to leave the dot for float numbers, use this
var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"
"aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')
→ 2.9.
Should strip any String which might surround a Number..
-
(negative) number case :)
parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
Use a regular expression, if your script implementation supports them. Something like:
myString.replace(/[^0-9]/g, '');
You can use a RegExp to replace all the non-digit characters:
var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238
Something along the lines of:
yourString = yourString.replace ( /[^0-9]/g, '' );
yourString = yourString.replace ( /[^0-9.]/g, '' );
replace(/[^0-9.,-]/g, ''
Short function to remove all non-numeric characters but keep the decimal (and return the number):
parseNum = str => +str.replace(/[^.\d]/g, ''); let str = 'a1b2c.d3e'; console.log(parseNum(str));
-
is the first character
In Angular / Ionic / VueJS -- I just came up with a simple method of:
stripNaN(txt: any) {
return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}
Usage on the view:
<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>
Unfortunately none of the answers above worked for me.
I was looking to convert currency numbers from strings like $123,232,122.11
(1232332122.11) or USD 123,122.892
(123122.892) or any currency like ₹ 98,79,112.50
(9879112.5) to give me a number output including the decimal pointer.
Had to make my own regex which looks something like this:
str = str.match(/\d|\./g).join('');
try
myString.match(/\d/g).join``
var myString = 'abc123.8
This,
.match(/\d|\.|\-/g).join('');
Handles both ,
and .
also -
Example:
"Balance -$100,00.50".match(/\d|\.|\-/g).join('');
Outputs
10000.50
The problem with these answers above, is that it assumes whole numbers. But if you need a floating point value, then the previous reg string will remove the decimal point.
To correct this you need write a negated character class with ^
var mystring = mystring.replace(/[^0-9.]/g, '');
we are in 2017 now you can also use ES2016
var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));
or
console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));
The result is
1238
Success story sharing
\D
?replace
work with this exact syntax in all browsers? seems like I remember getting anobject has no method 'replace'
in an older version of IE when using this with text I grabbed with jQuery... or something like that.