2012-05-18 48 views
6

Necesito tomar el precio de un elemento y agregarlo a otro.Cómo usar la expresión regular para la moneda

estoy usando esto:

\$\d+(?:\.\d+)? 

que parece funcionar para $0.50, $1.00, $20.00, $200.00 pero me golpeó una pared de ladrillos en $1,000.00 y $ 10,000.00

(poco probable $10,000.00 volverá a ser utilizado) .

La coma me está haciendo tropezar.

** Editar **

me fui durante una hora para volver a un montón de respuestas. Antes de pasar por ellos, pensé que aclararía en lugar de responder a todos los comentarios:

La plataforma que se usa automáticamente genera el valor total de los artículos en un carrito de compras. Se procesa en un elemento: esto cambia dependiendo de si un usuario está agregando o eliminando elementos.

Es poco probable que el valor entre en 10,000.00 porque los costos del producto no son tan altos.

Soy nuevo en el uso de la expresión regular me tomó el tiempo suficiente para llegar tan lejos, de ahí la pregunta.

Auto HTML generado:

<span vertical="False" quote="False" id="catCartSummary"> 
    <table cellspacing="0" class="cartSummaryTable"> 
    <tbody> 
     <tr> 
     <td class="cartSummaryItem">3 item(s), Total: $115.00 <a href="#" class="cartSummaryLink">View Cart</a></td> 
     </tr> 
    </tbody> 
    </table> 
</span> 

Sólo necesito el valor $ en este caso $ 115.00 - Pero lo necesito para trabajar por $ 1,000.00

+0

FYI expresión regular es parte de JavaScript, jQuery no específicamente. –

+1

¿Qué debería pasar con algo como '$ 1,000,00'? –

+0

¿no puedes agregar un coma en tu expresión regular? – jbduzan

Respuesta

10

Reemplazar non-digit y non-dot Simbols por '', a continuación, aplicar parseFloat:

var currencyValue = parseFloat("$1,000.50".replace(/[^\d\.]/g,'')); 

console.log(currencyValue) ; //1000.5 

ACTUALIZACIÓN: Si su 'generador de HTML Auto' genera cadenas de moneda válidos, entonces

/\$\S+/g 

la expresión regular es suficiente para extraer todas las monedas:

var currencies = $('#cartSummaryItem').text().match(/\$\S+/g); // ["$115.00"] 

Posteriormente, se podría convertirlos en números para la realización de las matemáticas en ellos:

var currenciesAsNumbers = currencies.map(function(item){ 
    return parseFloat(item.replace(/[^\d\.]/g,'')); 
}); // [115] 
+0

Esta es en realidad la mejor respuesta. Si necesita agregar los precios, sería mejor que realice la conversión a números reales y luego vuelva a formatear. –

+0

Escribió que necesita tomar el valor de un elemento a otro, no estoy seguro de que pueda analizar el valor. – gdoron

+1

Esto convierte una cantidad en dólares en un valor numérico. Esto es ciertamente útil para saber cómo hacerlo. Sin embargo, no le ayudará a encontrar los montos en dólares en primer lugar. –

2

Esto es trabajo para mí:

/\$\d+(,\d+)*(?:\.\d+)?/g 

DEMO

Encontré una excelente expresión regular que agarra todas las monedas válidas y customed un poco para sus necesidades:

/^\$[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$/g 

DEMO

The source of the regex

+1

Esto también coincidiría con '$ 0 ,,,,,. 0'. –

+0

@MarkByers. Reparado, gracias! – gdoron

+0

OK, pero aún coincide con '$ 0,0,0,0.0' sin embargo. –

1

Modificar para algo como esto:

\$(?:\d{1,3},)*\d+(?:\.\d+)? 

o esta

\$\d{1,3}(,\d{3})*(?:\.\d+)? 
0

Obtuve este:

^\d{1,3}(,\d{3})*(\.\d+)?$ 

Coincidirán solo con el número, sin incluir el símbolo de moneda.

+0

en realidad esta expresión regular es incorrecta, ya que coincide con todos los números, no solo con la moneda agregada (? <= \ $) En el inicio – Dmitry

+0

@Dmitry: He indicado en mi respuesta que no coinciden con la moneda. Es posible que desee cambiar su moneda más adelante, y será mejor si no descifró esa con RegEx. –

+0

Como he declarado yuo regexp coincida con "todos los números", lo que no significa que coincida solo con una parte numérica de la moneda, esto por ejemplo coincidirá en "El jugador con el número 47 fue comprado por $ 100.00" hasta 47, lo que obviamente no Un precio. – Dmitry

1
var re = /^\d{1,3}(\,\d{3})*(?:\.\d+)?$/; 

console.log(re.test('0.50')); 
console.log(re.test('1')); 
console.log(re.test('20.50')); 
console.log(re.test('200.50')); 
console.log(re.test('2,000')); 
console.log(re.test('2,000.50')); 
console.log(re.test('20,000')); 
console.log(re.test('20,000.00')); 
console.log(re.test('1,000,000')); 
console.log(re.test('1,000,000.50')); 
Cuestiones relacionadas