RegEx解析货币值

时间:2009-08-31 15:13:58

标签: regex actionscript-3

我需要在AS3中编写一个RegExp,它将Excel格式的货币值解析为一个数字: 例如。     RegExp($ 35,600.00)= 35600

并检查它是否格式正确(“,”作为千位分隔符,“。”作为小数点。货币符号可以是任何(不仅仅是$)并且可以站在开头或者端。

所以我只需要从数字中删除每个非数字并检查是否有效。

谢谢! 马丁

3 个答案:

答案 0 :(得分:7)

您需要两种情况,一种是逗号作为分隔符,另一种是十进制分隔整数。

如果是整数,请删除逗号或小数点后的所有内容(具体取决于您的格式)。然后运行以下正则表达式:

这将删除所有非数字字符:

s/\D+//g;

如果您没有整数,则需要为整数分隔符添加例外:

小数分隔符:

 s/[^\d.]+//g

逗号分隔符:

 s/[^\d,]+//g

*免责声明:我只在头脑中解析了这些正则表达式,所以我的语法可能略有偏差。

答案 1 :(得分:1)

在剥离前导和尾随货币符号和空格后,您可以使用以下表达式。

[1-9][0-9]{1,2}(,[0-9]{3})*(.[0-9]{2})+

那是

(
    [1-9][0-9]{0,2}  One to three digits, no leading zero, followed by
    (,[0-9]{3})*     a thousands separator and three digits, zero or more times,
  |                  or
    0                a leading zero.
)
(.[0-9]{2})?         Optional a decimal point followed by exactly two digits.

很好地处理货币符号并不是最简单的事情,因为您必须避免使用前导和尾随货币符号的输入。解决方案是使用预见断言。

(?=$(([$€] ?)?[0-9,.]+|[0-9,.]+( ?[$€]))^)[$€ ]+<ExpressionFromAbove>[$€ ]+

这样做如下。

(?=                   Positive look ahead assertion.
  $                   Anchor start of line.
  (                   Begin options.
    ([$€] ?)?         Optional leading currency symbol followed by an optional space
    [0-9,.]+          and one or more digits, thousand separators, and decimal points
  |                   or
    [0-9,.]+          one or more digits, thousand separators, and decimal points
    ( ?[$€])          followed by an optional space and and a currency symbol.
  )                   End options.
  ^                   Anchor end of line.
)
[$€ ]+                Leading currency symbol and optional space.
<ExpressionFromAbove> Match the actual number.
[$€ ]+                Trailing optional space and currency symbol.

如果您知道格式正确,请删除不是数字或小数点的所有内容并将其解析为小数(在C#中这将使用Decimal.Parse()),或者,如果有没有合适的解析方法,只需在小数点处拆分,解析成整数,然后合并两个数字。

答案 2 :(得分:0)

[$|£|<insert more pipe sepatared options here>]?(\d)*(,)?(\d)*.\d\d[$|£|<insert more pipe sepatared options here>]?

可能会工作。