【发布时间】:2015-09-18 15:57:12
【问题描述】:
我看过几篇关于使用 RegEx 验证美元金额的帖子,我非常接近我需要的内容,但有一个问题。这是我到目前为止所拥有的
^[\+\-]?\$?(\d*|\d{1,3}(,\d{3})*)(\.[0-9]+)?$
这是它所完成的:
- 不允许前导尾随空格
- 开头的正/负是可选的
- 美元符号是可选的
- 逗号是可选的,但如果存在 ○ 需要后跟 3 数字并以 1 到 3 位数字开头
- 小数点是可选的,但如果存在:1) 小数点前不需要数字 2) 小数点后需要 1 个或多个数字
所有这些条件都满足,但我遇到的问题是,如果用户只输入 +、- 或 $,则表达式返回 true。我正在寻找的是,如果$+- 存在,它们必须跟在后面。
我知道问题在于小数点前的数字是可选的,而小数部分本身也是可选的。但我想允许输入.25,而不必强制输入为0.25。
我尝试在可选的美元符号 \$? 之后添加 not end of line [^$] 认为 +-$ 不能跟在行尾之后,但这似乎不起作用。
感谢您的帮助!
-肖恩
【问题讨论】:
-
^[+-]?\$?(?=.)(\d*|\d{1,3}(,\d{3})*)(.[0-9]+)?$,使用前瞻 regex101.com/r/iE6jM9/1 -
完美答案谢谢!我对 RegEx 还很陌生,之前没有使用过前瞻断言。
-
但它会成功的;)
-
或
^[+-]?\$?(\d+|\d{1,3}(,\d{3})*)(.[0-9]+)?$,将\d*改为\d+ -
抱歉,您需要转义
...^[+-]?\$?(?=.)(\d*|\d{1,3}(,\d{3})*)(\.[0-9]+)?$或^[+-]?\$?(\d+|\d{1,3}(,\d{3})*)(\.[0-9]+)?$
标签: regex