2012-03-18 17 views
25

Necesito una función para eliminar todos los caracteres excepto los números + caracteres: '$', '.' y ','.

¿Cómo puedo hacer esto?

+1

La manera más fácil aquí sería usar una expresión regular – aurbano

+0

¿De qué? Un campo de entrada? –

Respuesta

35
> 'worth $12,345.00 dollars'.replace(/[^0-9$.,]/g, '') 
"$12,345.00" 

Esta es la respuesta que pidió. Yo no lo recomendaría para la extracción de las monedas, ya que puede sufrir de problemas como éste:

> 'A set of 12 worth between $123 and $456. A good buy.'.replace(/[^0-9$.,]/g, '') 
"12$123$456.." 

Si desea simplemente extraer expresiones de una forma de moneda similar, se puede hacer:

> 'set of 12 worth between $123.00 and $45,678'.match(/\$[0-9,]+(?:\.\d\d)?/g) 
["$123.00", "$45,678"] 

Si necesita más complicado juego (por ejemplo, que sólo desea extraer el valor en dólares y pasar por alto el valor ciento) que podría hacer algo como How do you access the matched groups in a JavaScript regular expression? por ejemplo:

> var regex = /\$([0-9,]+)(?:\.(\d\d))?/g; 
> while (true) { 
>  var match = regex.exec('set of 12 worth between $123.00 and $45,678'); 
>  if (match === null) 
>   break; 
>  console.log(match); 
> } 
["$123.00", "123", "00"] 
["$45,678", "45,678", undefined] 

(De modo que tenga cuidado, los objetos javascript regexp no son objetos inmutables/finales, pero tienen estado y se pueden usar para la iteración como se demostró anteriormente. Por lo tanto, no puede "reutilizar" un objeto regexp. Incluso pasando myRegex2 = RegExp(myRegex) se mezclará el estado; una decisión de lenguaje muy pobre para el constructor. Ver la adición sobre cómo clonar correctamente expresiones regulares en javascript) Puede volver a escribir lo anterior como un lazo para-muy exótica si lo desea:

var myString = 'set of 12 worth between $123.00 and $45,678'; 
var regex = '\$([0-9,]+)(?:\.(\d\d))?'; 

for(var match, r=RegExp(regex,'g'); match=regex.exec(myString) && match!==null;) 
    console.log(match); 

adenda - ¿Por qué no se puede reutilizar. Javascript RegExp objetos

mal diseño del lenguaje, lo que demuestra cómo se reutiliza estado:

var r=/(x.)/g 
var r2 = RegExp(r) 

r.exec('xa xb xc') 
["xa", "xa"] 
r2.exec('x1 x2 x3') 
["x2", "x2"] 

Cómo clonar una expresión regular adecuadamente en javascript (se que definir con una cadena):

var regexTemplate = '(x.)' 

var r = RegExp(regexTemplate, 'g') 
var r2 = RegExp(regexTemplate, 'g') 

r.exec('xa xb xc') 
["xa", "xa"] 
r2.exec('x1 x2 x3') 
["x1", "x1"] 

Si desea conservar mediante programación tales como banderas 'g', es probable que pueda utilizar regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate).

+0

gracias. Solo usé la primera línea, pero probablemente todos me ayudarán en el futuro. – lisovaccaro

3

Si no desea permitir a alguien para escribir estos valores en un cuadro de texto a continuación, jQuery Numeric es un buen complemento que hace exactamente lo que quiere,

Cuestiones relacionadas