我需要在AS3中编写一个RegExp,它将Excel格式的货币值解析为一个数字: 例如。 RegExp($ 35,600.00)= 35600
并检查它是否格式正确(“,”作为千位分隔符,“。”作为小数点。货币符号可以是任何(不仅仅是$)并且可以站在开头或者端。
所以我只需要从数字中删除每个非数字并检查是否有效。
谢谢! 马丁
答案 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>]?
可能会工作。