我很接近,但我需要一些帮助才能完成正则表达式。这是目标:
应该成功:
应该失败:
这是我到目前为止的正则表达式,但它并没有完全正确地执行以上所有操作:
^([1-4][0-9]|50|[3-9])+(\.[0-9][0-9])?$
有人可以分享答案吗?谢谢!
答案 0 :(得分:2)
^(50(\.00)?|([1-4][0-9]|[3-9])(\.[0-9][0-9])?)$
有两个问题。首先,你在小数点后允许非零值,即使它之前的值是50.所以我在顶层将它分开。其次,只需删除+
即可。因为它,你可以拥有更大的数字(例如,将50
和43
链接在一起。
然而,正如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})?$