匹配值货币十进制输入的正则表达式

时间:2015-07-16 00:07:44

标签: regex

我需要一个正则表达式,允许任何大于0的数字,带或不带小数,并允许一个或两个小数位。

我发现以下\d+\.?\d{1,2}适用于除0-9之外的所有内容。

怎么了?我的印象是\d+应该代表任何长度为1位或更多位数的[0-9]字符。

2 个答案:

答案 0 :(得分:2)

我认为这可行 -

 # [1-9]\d*(?:\.\d{0,2})?

 [1-9] \d*                     # any number greater than 0
 (?: \. \d{0,2} )?             # with or without a decimal and/or 1 or two places

答案 1 :(得分:0)

在阅读了一些评论后,我意识到了我的问题的解决方案。我的正则表达式中至少需要两个十进制字符。

最容易通过将正则表达式分解为三个部分来解释。

  1. 第一部分是我想在小数点前允许的任何内容 点,由\d+表示。这种模式告诉我允许 任何[0-9]字符,必须有1个或多个字符。
  2. 下一部分是小数点,它是可选的,是 由\.?表示。
  3. 最后一节是问题所在。我有\d{1,2}。这个 pattern表示需要1或2个十进制字符[0-9]。自从我 想要小数位数是可选的正确的 这个模式应该是\d{0,2},表示我可以有0, 1或2个十进制字符[0-9]。由于第一部分需要至少一个字符而第三部分需要1或2,因此我在整个正则表达式模式中要求至少2个字符,因此,只有一个字符(即0-9)的任何内容都无效。
  4. 更新的模式为\d+\.?\d{0,2},并且正确地允许我想要的所有值。