RegEx Dollar验证

时间:2015-09-18 15:57:13

标签: regex

我已经看过几篇关于使用RegEx验证美元金额的帖子,而且我非常接近我需要但有一个问题。这是我到目前为止所拥有的

$col==7 || $col==9 ||...

以下是它的成就:

  • 不允许领先的尾随空间
  • 开头的正/负是可选的
  • 美元符号是可选的
  • 逗号是可选的,但如果它们存在,则需要后跟3 数字,前面加1到3位数字
  • 小数点是可选的,但如果存在:1)小数点前不需要数字2)小数点后需要1位或更多位数

满足所有这些条件,但我遇到的问题是,如果用户只输入^[\+\-]?\$?(\d*|\d{1,3}(,\d{3})*)(\.[0-9]+)?$ +-,则表达式返回true。我正在寻找的是,如果$存在,则必须遵循一些东西。

我知道问题是小数前面的数字是可选的,小数部分本身也是可选的。但是我想允许输入$+- w / o不得不强制输入.25

我尝试在可选的美元符号0.25之后添加不在行[^$]后面,认为\$?后面没有行尾,但是没有&#39 ;似乎工作。

我感谢任何帮助!

-Shawn

2 个答案:

答案 0 :(得分:1)

您需要使用以下正则表达式

  1. \d*导致了问题,因此请使用前瞻断言。它确认符号后面至少有一个字符
  2. 您需要转义.,使用\.,否则它将匹配任何字符
  3. 正则表达式:

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

    <强> Regex explanation here

    Regular expression visualization

答案 1 :(得分:0)

我认为问题是\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

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