正则表达式的美元金额在3到50之间

时间:2012-10-08 19:06:16

标签: regex

我很接近,但我需要一些帮助才能完成正则表达式。这是目标:

应该成功:

  • 10.05
  • 3.00
  • 50

应该失败:

  • 55.99(> 50)
  • 3.001(最后不能有“1”)
  • 0.50(<3)
  • .99(&lt; 3)
  • $ 50(不能有“$”)
  • 5.2(如果是小数,则必须有2位数字)

这是我到目前为止的正则表达式,但它并没有完全正确地执行以上所有操作:

^([1-4][0-9]|50|[3-9])+(\.[0-9][0-9])?$

有人可以分享答案吗?谢谢!

4 个答案:

答案 0 :(得分:2)

^(50(\.00)?|([1-4][0-9]|[3-9])(\.[0-9][0-9])?)$

有两个问题。首先,你在小数点后允许非零值,即使它之前的值是50.所以我在顶层将它分开。其次,只需删除+即可。因为它,你可以拥有更大的数字(例如,将5043链接在一起。

然而,正如Bergi在评论中提到的那样,最好只检查格式,并单独进行范围检查(不使用正则表达式)。这将是格式检查:

^\d+(\.\d\d)?$

答案 1 :(得分:0)

快速浏览一下......只需删除+

即可

^([1-4] [0-9] | 50 | [3-9])([0-9] [0-9])?$

答案 2 :(得分:0)

您应该在潜在分数之前删除+。此外,您需要处理50美元作为特殊情况,因为它只能在.00之后,而不是任何分数。

另外,我将[0-9]更改为数字的快捷方式:\d

/^((0?[3-9]|[1-4]\d)(\.\d\d)?|50(\.00)?)$/

答案 3 :(得分:0)

我发现online utility在输入所需范围的下限和上限时返回整数的正则表达式。我在.之前使用限制为3-50且在.之后使用限制为0-99的部分。结果如下:

^0*([3-9]|[1-4][0-9]|50)(\.[0-9]{2})?$