2010-12-16 16 views
22

¿Cómo se filtran solo los números de una cadena?JQuery Número de filtro de una cadena

Example Pseudo Code: 
number = $("thumb32").filternumbers() 
number = 32 
+0

¿Podría dar algunos datos de ejemplo? dkwlj-32-fjkij-ff0-33? – sunn0

+2

Lea las preguntas frecuentes: http://stackoverflow.com/faq Las preguntas deben ser * preguntas *. Y cuanto más esfuerzo le dediques a tu pregunta, mejor será la calidad y la cantidad de respuestas que recibirás recientemente (y más respeto por el lugar que estás mostrando). –

Respuesta

67

No es necesario jQuery para esto - simplemente vieja JavaScript regex replacement

var number = yourstring.replace(/[^0-9]/g, '')

Esto se librará de cualquier cosa que no es [0-9]

Editar: Aquí está una pequeña función para extraer todos los números (como números reales) de una cadena de entrada. No es una expresión exhaustiva, pero será un buen comienzo para cualquiera que lo necesite.

function getNumbers(inputString){ 
    var regex=/\d+\.\d+|\.\d+|\d+/g, 
     results = [], 
     n; 

    while(n = regex.exec(inputString)) { 
     results.push(parseFloat(n[0])); 
    } 

    return results; 
} 

var data = "123.45,34 and 57. Maybe add a 45.824 with 0.32 and .56" 
console.log(getNumbers(data)); 
// [123.45, 34, 57, 45.824, 0.32, 0.56]; 
+6

¿Por qué la expresión regular es tan difícil? Se ve tan extraño y mi cerebro simplemente parece cerrarse inmediatamente porque se abruma con mucha puntuación ... y símbolos, si no sé su significado pero sé que significan algo ... ¿Por qué tengo que mira esto todo el tiempo? La información simplemente no se me pega en la cabeza, no importa qué ... –

+5

^Bienvenido al club. –

+0

Hola. Pero para números como 12.5, 20.3. Ellos regresan 125 y 203? –

26

En realidad, no jQuery en absoluto:

number = number.replace(/\D/g, ''); 

Esa expresión regular, /\D/g, no coincide con cualquiera dígitos. Por lo tanto, la llamada a .replace() reemplaza todos los no dígitos (todos ellos, gracias a "g") con la cadena vacía.

edición — si quieres una * número valor real, se puede utilizar parseInt() después de eliminar la no-dígitos de la cadena:

var number = "number32"; // a string 
number = number.replace(/\D/g, ''); // a string of only digits, or the empty string 
number = parseInt(number, 10); // now it's a numeric value 

Si la cadena original puede tener ningún dígito en absoluto , obtendrá el valor numérico NaN sin valor de parseInt en ese caso, que puede ser tan bueno como cualquier cosa.

+0

Es posible que desee un 'parseInt' allí? – sje397

+0

@ sje397: Tal vez, tal vez no. Con la calidad de la pregunta, no tenemos idea de si quiere una serie de solo dígitos. –

+0

Maybe = maybe not = might? ;) – sje397

Cuestiones relacionadas