2009-12-07 20 views
442

Considere un escenario que no sea DOM en el que desee eliminar todos los caracteres no numéricos de una cadena mediante JavaScript/ECMAScript. Cualquier caracter que esté en el rango de 0 a 9 debe mantenerse.Elimine todos los caracteres no numéricos de la cadena en JavaScript

var myString = 'abc123.8<blah>'; 

//desired output is 1238 

¿Cómo lograr esto en JavaScript? Recuerde que este es un escenario que no es DOM, por lo que jQuery y otras soluciones que involucran eventos de navegación y pulsación de tecla no son adecuadas.

Respuesta

896

utilizar el método de la cadena .replace con una expresión regular de \D, que es una clase de caracteres abreviada que coincide con todos los no-dígitos:

myString = myString.replace(/\D/g,''); 
+2

Gracias csj; en cualquier lugar para encontrar más información sobre '\ D'? –

+21

Esta es mi referencia regex predeterminada: http://www.regular-expressions.info/reference.html Las clases de caracteres incorporadas tienen complementos incorporados. \ d \ D (dígitos versus todo menos dígitos) \ w \ W (charcters de palabras versus todo menos caracteres de palabras) \ s \ S (espacios en blanco versus todo menos espacios en blanco) – csj

+3

Para que quede claro, aquí está la sintaxis para reemplazar : http://www.w3schools.com/jsref/jsref_obj_regexp.asp porque las barras diagonales y la "g" son parte de ese comando, no son parte del RegEx. –

10

Algo a lo largo de las líneas de:

yourString = yourString.replace (/[^0-9]/g, ''); 
+2

exactamente una respuesta a la pregunta original, pero una versión de manejar la coma decimal: 'SuCadena = SuCadena. replace (/[^0-9.]/g, ''); ' –

19

Usted puede usar una expresión regular a replace todos los caracteres que no sean dígitos:

var myString = 'abc123.8<blah>'; 
myString = myString.replace(/[^\d]/g, ''); // 1238 
27

utilizar una expresión regular, si su aplicación escritura de los soporta. Algo así como:

myString.replace(/[^0-9]/g, ''); 
+11

Por alguna razón, esta forma parece mucho más legible que [^ \ d]. –

+1

¿Cuál es la g para después del delimitador de expresiones regulares? –

+0

no es bueno para los números flotantes:/ – vsync

247

Si necesita este para salir del punto de flotar números, utilizar este

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50" 
+3

¿Algún experto en expresiones regulares? Cómo hacer que esto permita solo un único punto (muy relevante con números). ¡Gracias! – Kasperi

+1

¿qué quieres decir? dar ejemplo de entrada y salida – max4ever

+0

Es decir, actualmente acepta, por ejemplo, "1..56" y "1.5.28", ¿no? ¿Es posible hacer que acepte solo números con un solo punto, como "1.56"? – Kasperi

0

estamos en ahora también se puede utilizar ES2016

var a = 'abc123.8<blah>'; 
console.log([...a].filter(e => isFinite(e)).join('')); 

o

console.log([...'abc123.8<blah>'].filter(e => isFinite(e)).join('')); 

El resultado es

1238 
No
+5

Esta es una forma muy ineficiente de realizar esta operación. – djheru

+0

Sin duda es una alternativa, pero no muy buena. –

Cuestiones relacionadas