当前位置:  开发笔记 > 开发工具 > 正文

什么是"最好的"美国货币RegEx?

如何解决《什么是"最好的"美国货币RegEx?》经验,为你挑选了3个好方法。

快速搜索货币正则表达式会带来很多结果.

我选择其中之一的问题是,如果不测试所有边缘情况,正则表达式很难验证.我可以花很多时间在这上面,因为我相信其他数百名开发人员已经做过了.

有没有人有美国货币的正则表达式已经过彻底测试

我唯一的要求是匹配的字符串是US Currency并解析为System.Decimal:

[ws][sign][digits,]digits[.fractional-digits][ws] 

Elements in square brackets ([ and ]) are optional. 
The following table describes each element. 

ELEMENT             DESCRIPTION
ws                  Optional white space.
sign                An optional sign.
digits              A sequence of digits ranging from 0 to 9.
,                   A culture-specific thousands separator symbol.
.                   A culture-specific decimal point symbol.
fractional-digits   A sequence of digits ranging from 0 to 9. 

Keng.. 84

这里有来自Regex Buddy制造商的一些东西.这些来自图书馆,所以我相信他们已经过彻底的测试.

编号:货币金额(强制分数)可选千位分隔符; 强制两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*\.[0-9]{2}$

编号:货币金额(可选分数)可选千位分隔符; 可选的两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$

编号:货币金额美国和欧盟(可选美分)可以使用美式123,456.78表示法和欧式123.456,78表示法.可选千位分隔符; 可选的两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$

我认为我们可以修改可选的逗号问题,用`(?:(,[0-9] {3})*|([ 0-9] {3})*)`.无处不在的逗号或没有逗号. (6认同)

现在很老了但这个正则表达式不能很好地处理可选的逗号.数字`11111111,111,111111.11`显然是格式错误,但这个正则表达式将匹配它. (2认同)

@Keng,我同意它符合OP的需求,只是记下来,因为这是一个问题的答案,叫做什么是"最好的"美国货币RegEx` (2认同)


小智.. 15

我在www.RegExLib.com上通过Kirk Fuller,Gregg Durishan在线找到了这个正则表达式

在过去的几年里,我一直在成功使用它.

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

虽然我的测试不具有权威性,但这个测试对我有用.接受:123 123.00 $ 123.00 1234 $ 1234 $ 1234.00 $ 1,234.00拒绝:#123 1,2,34我发现的唯一问题是它接受了123.4 (3认同)


PhiLho.. 7

根本没有经过彻底的测试(我只是写了它!),但似乎行为正确:

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

测试集:

0
1
33
555
4,656
4656
99,785
125,944
7,994,169
7994169
0.00
1.0
33.78795
555.12
4,656.489
99,785.01
125,944.100
-7,994,169
-7994169.23 // Borderline...

Wrong:
000
01
3,3
5.
555,
,656
99,78,5
1,25,944
--7,994,169
0.0,0
.10
33.787,95
4.656.489
99.785,01
1-125,944.1
-7,994E169

注意:您的System.Decimal是依赖于语言环境的,很难在正则表达式中生成,除非在构建它时.我假设数字按三个分组,即使在某些文化(语言环境)中有不同的规则.
在它周围添加空格是微不足道的.



1> Keng..:

这里有来自Regex Buddy制造商的一些东西.这些来自图书馆,所以我相信他们已经过彻底的测试.

编号:货币金额(强制分数)可选千位分隔符; 强制两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*\.[0-9]{2}$

编号:货币金额(可选分数)可选千位分隔符; 可选的两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?$

编号:货币金额美国和欧盟(可选美分)可以使用美式123,456.78表示法和欧式123.456,78表示法.可选千位分隔符; 可选的两位数分数

Match; JGsoft:
^[+-]?[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{2})?)$


我认为我们可以修改可选的逗号问题,用`(?:(,[0-9] {3})*|([ 0-9] {3})*)`.无处不在的逗号或没有逗号.
现在很老了但这个正则表达式不能很好地处理可选的逗号.数字`11111111,111,111111.11`显然是格式错误,但这个正则表达式将匹配它.
@Keng,我同意它符合OP的需求,只是记下来,因为这是一个问题的答案,叫做什么是"最好的"美国货币RegEx`

2> 小智..:

我在www.RegExLib.com上通过Kirk Fuller,Gregg Durishan在线找到了这个正则表达式

在过去的几年里,我一直在成功使用它.

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


虽然我的测试不具有权威性,但这个测试对我有用.接受:123 123.00 $ 123.00 1234 $ 1234 $ 1234.00 $ 1,234.00拒绝:#123 1,2,34我发现的唯一问题是它接受了123.4

3> PhiLho..:

根本没有经过彻底的测试(我只是写了它!),但似乎行为正确:

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

测试集:

0
1
33
555
4,656
4656
99,785
125,944
7,994,169
7994169
0.00
1.0
33.78795
555.12
4,656.489
99,785.01
125,944.100
-7,994,169
-7994169.23 // Borderline...

Wrong:
000
01
3,3
5.
555,
,656
99,78,5
1,25,944
--7,994,169
0.0,0
.10
33.787,95
4.656.489
99.785,01
1-125,944.1
-7,994E169

注意:您的System.Decimal是依赖于语言环境的,很难在正则表达式中生成,除非在构建它时.我假设数字按三个分组,即使在某些文化(语言环境)中有不同的规则.
在它周围添加空格是微不足道的.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有