为了账号安全,请及时绑定邮箱和手机立即绑定

什么是“最佳”美国货币正则表达式?

什么是“最佳”美国货币正则表达式?

炎炎设计 2019-10-16 14:16:56
快速搜索货币正则表达式会带来很多结果。我在选择其中之一时遇到的问题是,如果不测试所有边缘情况,很难验证正则表达式。我可以花很多时间在此上,因为我确信其他数百名开发人员已经做过。是否有人拥有经过全面测试的美元正则表达式?我唯一的要求是匹配的字符串是US Currency并解析为System.Decimal:[ws] [sign] [digits,] digits..fractional-digits] [ws] 方括号([和])中的元素是可选的。 下表描述了每个元素。 元素描述ws可选的空格。sign可选标志。digits一系列数字,范围从0到9。,一个特定于文化的千位分隔符。。特定于文化的小数点符号。分数数字范围从0到9的数字序列。 
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

这是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})?$

数字:货币金额US和EU(可选的美分)可以使用美式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})?)$


查看完整回答
反对 回复 2019-10-16
?
智慧大石

TA贡献1946条经验 获得超3个赞

根本没有经过完全测试(我只是写了它!),但是表现正常:


^-?(?: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依赖于语言环境,很难在正则表达式中创建,除非在构建时。我假设即使在某些文化(区域设置)中有不同的规则,数字也要按三组进行分组。

在其周围添加空格很简单。


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信