正则表达式:只接受小数点后两位

9

大家好,我希望以下所有情况都是合法的:

123
123.1
123.12

我尝试使用此代码 ^[0-9]*\.[0-9]{2}$ 或 ^[0-9]*\.[0-9][0-9]$,但并不起作用。请问有谁能帮我解决这个问题?

5个回答

15

试试这个:

^[0-9]*(\.[0-9]{1,2})?$

根据你的第二个示例,但允许一个或两个小数位,并使整个小数部分可选。

[编辑]

问题的标准已被提问者更改 - 请查看下面的评论。他现在希望小数点之前的数字仅允许最多六位数字,并要求我编辑答案以适应这一变化。

只需要用 {0,6}(表示零到六个数字)替换 *(表示任意数量的数字)。如果您想至少有一个数字,则应使用 {1,6}

以下是修改后的正则表达式:

^[0-9]{0,6}(\.[0-9]{1,2})?$

1
我建议将第二部分设为非捕获组,但这只是我的个人偏好。 - josh.trow
@Spudely:抱歉,这个正在正常工作,但我需要另外的帮助。我的数字应该在1到6之间,请你编辑一下并提供帮助。 - Vivekh
@user - 这是你所有的数字,还是只有小数点后面的数字?请澄清一下,我会相应地编辑答案。 - Spudley
@user - 好的,我已经编辑了答案。希望我对你修改的要求有所理解。 - Spudley
@user - 好的,我没有完全理解它(我认为0-6的事情有点奇怪!)。我会再次编辑..... - Spudley
显示剩余2条评论

5

尝试...

^\d{1,6}(?:\.\d{1,2})?$

* Edited根据建议进行了修改,使其不捕获。


2

almost got it...

^[0-9]*(\.[0-9]{1,2})?$


1
嗯,不太对:这允许一个没有小数的尾随点——例如 123. - Spudley

1

你可能还需要担心以点号开头的数字,将没有任何数字的点号视为无效,并拒绝空数字:

^(?:\d+|\d*\.\d{1,2})$

这个程序接受 1.11.0 但是拒绝 .1. 和(空数字)。


1

按照您的所有要求尝试这个

 ^(\d{0,6})(\.\d{1,2})?$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接