如何编写匹配会计格式负货币值的正则表达式?
原有正则问题分析
你写的^0\.00||(\(\d*(?:\.\d{1,2})?\))?$存在两个核心问题:
- 连续的
||相当于插入了一个空匹配分支,会直接匹配任意空内容,所以完全不符合格式的abcd也能通过校验 \d*允许括号内的数字部分为空,会错误匹配()这类无效值
正确正则表达式
场景1:仅匹配你给出的括号格式负货币值
^\(\d+(?:\.\d{1,2})?\)$
场景2:需要同时兼容匹配0.00正零值(对应你原有正则里的0.00分支)
^(?:0\.00|\(\d+(?:\.\d{1,2})?\))$
规则说明
- 整体用
^和$包裹,严格校验整个字符串的格式 \(和\)匹配英文左右括号,特殊符号需要转义\d+要求括号内至少有1位数字,避免空内容(?:\.\d{1,2})?是可选非捕获组,允许数字带1~2位小数,也可以是纯整数
匹配效果
- 合法值匹配成功:
(1.00)、(100)、(100.00) - 非法值匹配失败:
abcd、()、(1.123)、100、(abc)
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

