1

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

应该成功:

  • 10.05
  • 3.00
  • 50

应该失败:

  • 55.99 (>50)
  • 3.001(最后不能有“1”)
  • 0.50 (< 3)
  • .99 (< 3)
  • 50 美元(不能有“$”)
  • 5.2(如果是十进制,后面必须有2位)

这是我到目前为止的正则表达式,但它并不能完全正确地完成上述所有操作:

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

任何人都可以分享答案吗?谢谢!

4

4 回答 4

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

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

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

^\d+(\.\d\d)?$
于 2012-10-08T19:11:16.550 回答
0

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

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

/^((0?[3-9]|[1-4]\d)(\.\d\d)?|50(\.00)?)$/
于 2012-10-08T19:14:14.357 回答
0

我找到了一个在线实用程序 ,它在输入所需范围的下限和上限时返回整数的正则表达式。我将它用于.限制 3-50 之前和.限制 0-99 之后的部分。结果如下:

^0*([3-9]|[1-4][0-9]|50)(\.[0-9]{2})?$
于 2012-10-08T19:15:01.033 回答
0

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

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

于 2012-10-08T19:11:09.333 回答