【问题标题】:RegEx Dollar validation正则表达式美元验证
【发布时间】: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


【解决方案1】:

你需要使用下面的正则表达式

  1. \d* 导致问题,所以使用前瞻断言。它确认符号后至少有一个字符
  2. 您需要转义.,改用\.,否则它将匹配任何字符

正则表达式:

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

Regex explanation here

【讨论】:

  • 这对解决方案不起作用,因为需要允许以下内容 .25 +.25 -.25 $.25 -$.25 +$.25
  • 更新了答案:)
【解决方案2】:

我认为问题出在\d*,在:

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

将其替换为+ 似乎可以确保至少输入一位数字。

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

这可确保+-$ 后跟至少一位数字。

demo

一个潜在的问题是$.25 将不匹配,但是您可以通过以下方式解决此问题:

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

demo

这个正则表达式可能适用于所有正则表达式引擎。如果引擎支持前瞻,你可以让它更优雅。

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2021-02-24
    相关资源
    最近更新 更多