Sé que esta es una vieja pregunta, pero la respuesta de CMS parece tener un pequeño defecto: solo funciona si el formato de moneda usa "." como separador decimal. Por ejemplo, si necesita trabajar con rublos rusos, la cadena se verá así: "1 000,00 rub."
Mi solución es mucho menos elegante que la de CMS, pero debería ser el truco.
var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\d.*?\d)(?:\D+(\d{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
Supuestos:
- valor de la moneda utiliza la notación decimal
- no hay dígitos en la cadena que no son una parte del valor de la moneda
- valor de la moneda contiene 0 o 2 dígitos en su parte fraccionaria *
La expresión regular incluso puede manejar algo así como "1,999 dólares y 9 9 centavos ", aunque no es una característica prevista y no se debe confiar en ella.
Espero que esto ayude a alguien.
parece convertir perfectamente para mí, gracias –
+1 (Lamento el comentario anterior, el hecho de que en realidad * excluye * el punto tampoco se me ocurrió por alguna razón.) – Tomalak
Otra razón por la que RegExp puede ser elegante. – OnesimusUnbound