2013-10-01 31 views
0

我需要从字符串中获取货币。我的价格可以有多种格式。我们来看一下例如CAD vs USD。 CAD将被格式化是这样的:多种货币的Javascript正则表达式

$ 5.00 CAD

尽管美元将被格式化,这样

$ 5.00美元

该系统还支持欧元和英镑。显然价格可能在几千美元。

这里是我的失败尝试:

result = /^([^\$]+)\$/i.exec(price.text()); 
+1

您能期待什么错误的输入? – Halcyon

+2

你只是想把号码拿出来吗? '/(\ d | \。)+ /'? (这显然是一个粗糙的正则表达式,但它听起来像会做这项工作。) – Mathletics

+0

该字段从数据库字符串填充。所以验证已经完成。然而,之前在该项目上工作的人决定放置字符串,而不是浮动,出于某种原因。我不必担心“,”或特殊字符。我只需要获取浮点数。 –

回答

1

不要过时。

/(\d|\.)+/ 

将拉出的数字。

你也可以做一个替换,每adeneo,把它清理干净:

price.replace(/[^0-9.]/g, '') 

然后parseFloat如果您需要。

0

通常表示为[intcurrency]元组。我会瞄准这样的格式。

你的字符串似乎有点绒毛。 $为一。

因此,如何:

var db_string = "5.00$ CAD"; // or "$5.00 USD" or "€5.00 EUR" 
var clean = db_string.replace(/[0-9A-Z ]/g, ""); // removes $ . and euro etc. 
var parts = clean.split(" "); 
var num = parseInt(parts[0], 10); // amount as int, in cents 
var cur = parts[1]; // currency: USD, CAD, EUR etc. 
1

哇 - 我不知道我的理解 - 你只需要提取数(千,整体与部分十进制)BUIT不是货币类型???汇率呢?还有其他列表明货币类型吗?只是看起来很奇怪...

但是,如果该列只包含一个带有amnount和货币指标的字符串,那么[\d.,]+应该得到数字(以及任何尾随或前导逗号或句点) - 是否适合您?

+0

是的,实际上数据库是有点混乱。之前与这个项目合作的人把一个简单的字段放在字符串中。真的很奇怪,但我必须处理它。我试图努力。简单\ d完成了这项工作。谢谢。 –

+0

只是一个简单的问题 - 许多欧洲货币使用'''作为小数分隔符 - 您的数据是否没有? –