求匹配全球货币格式的正则表达式
完善全球银行对账单金额匹配正则表达式
需求说明
需要一个正则表达式匹配全球多种货币金额格式(示例仅作参考,符合规则的任意金额均可匹配),同时满足以下约束:
$ 1.234,56 R$ 1.234,56 1.234,56 $ 1.234,56 Kč kr. 1.234,56 €1.234,56 HK$ 1,234.56 1.234,56 Ft ₹ 1,234.56 ₪ 1.234,56 ¥ 1,234.56 ₩ 1,234.56 RM 1,234.56 $ 1,234.56 kr 1,234.56 ₱ 1,234.56 1.234,56 zł 1.234,56 p. $1,234.56 R 1,234.56 1.234,56 kr fr. 1.234,56 元 1,234.56 1,234.56 ฿ 1,234.56 ₺ £1,234.56 $1,234.56 1.234,56 ₫ $0 $0.00 $ 0,00 $ 0.00 0.00 0,00 1234.00 1234,00 (1,234.00) $(1,234.00) ($1,234.00) -$1,234.00 -1234.00 $-1,234.00 234.00 CR 234.00 DR 234.00 WD 234.00 W/D
附加规则
- CR、DR支持任意大小写混合(如CR、Cr、cR、cr)
- WD、W/D仅支持全大写或全小写(如WD、wd、W/D、w/d)
- 排除纯独立数字(如4、45、456);无货币符号的数字必须带有小数部分或千位分隔(如234.00、234,00)
现有正则问题
原正则无法处理负数括号格式、大小写混合的货币代码、后缀标识规则,且无法有效排除纯独立数字:
^(?:[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₺﷼]|(?:[A-Z]{2,3}\s?\.?\s?))?\s?\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})?\s?(?:[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₺﷼]|(?:[A-Z]{2,3}\s?\.?\s?))?$
完善后的正则表达式
^(?<!\S)(?:(?:[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₫₺元₿﷼]|(?:[A-Za-z]{1,3}(?:\s?\.)?\s?)))?(?:-|(?=\())?(?:\((?:[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₫₺元₿﷼]?)?|[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₫₺元₿﷼]?-?)?(?:\d{1,3}(?:[.,]\d{3})*|0)(?:[.,]\d{2})?(?:\))?(?:\s?(?:(?:[Cc][Rr]|[Dd][Rr])|(?:[Ww][Dd]|[Ww]\/[Dd])))?\s?(?:(?:[$€£₹¥฿₽₺₴₸₣₱₩₮₡₢₣₲₳₵₪₫₺元₿﷼]|(?:[A-Za-z]{1,3}(?:\s?\.)?)))?(?!\S)$
关键改进点
- 边界控制:
(?<!\S)和(?!\S)确保金额为独立单元,避免与其他文本粘连误匹配 - 负数格式支持:兼容
-前缀、括号包裹的多种负数写法(如$(123.00)、($123.00)) - 货币符号与代码优化:
- 补充了₫、元等遗漏符号
- 支持大小写混合的货币代码(如Kč、zł)和带点的代码格式(如kr.、fr.)
- 数字格式验证:
- 允许纯零(如
$0),但排除非零纯整数(如4、456),强制要求小数部分或千位分隔
- 允许纯零(如
- 后缀标识处理:
- CR/DR用
[Cc][Rr]|[Dd][Rr]支持任意大小写混合 - WD/W/D用
[Ww][Dd]|[Ww]\/[Dd]严格限制全大/全小写
- CR/DR用
内容的提问来源于stack exchange,提问作者kittonian
相关产品推荐
相关产品推荐

