小数的正则表达式

3

我有一个简单的表达式需要编写,但是我对正则表达式真的不太熟悉。

我的限制是:最多1位数字,最多4位数字,允许更少

以下内容应该可以通过:

1
1.2
1.23
1.234
1.2345

这些应该失败。

10
10.1
1.23456

我最接近的是\d\.\d{0,4},但它不能选择1,并且从第二个列表中选择了 0.11.2345
我还应该说明,这是在用户键入时进行的检查,如果有所不同。
编辑
由于有很多回复涵盖了几个不同的点,我觉得我应该指定一些更多的内容,特别是因为有人可能会指引我走上更好的道路。我正在使用这个网页表单。它只需要允许用户在键入时满足这些条件,所以如果他们有“4”,并尝试输入“1”,它不会允许,但如果他们首先输入“。”,则会允许。或者不允许在他们做出类似“2.5345”的操作后输入,因为小数点后有4位数字。

我已经尝试了问题中的内容。 - Cody Harness
1
如果您使用正则表达式设置长度,必须使用锚点。请参见此演示 - Wiktor Stribiżew
@stribizhev,0.1是来自于失败列表中的10.1,这意味着它接受了部分错误的输入。 - Cody Harness
你可能需要两个正则表达式:1)用于实时验证 ^\d(?:\.\d{0,4})?$,2)用于最终验证 ^\d(?:\.\d{1,4})?$ - Wiktor Stribiżew
你说“小数点前1位,小数点后4位,最多允许更少”。这意味着.2应该被允许。如果是这样,到目前为止所有的四个答案都会失败,因为它们要求有一个起始数字,而不是一个或更少的起始数字... - TessellatingHeckler
显示剩余3条评论
4个回答

3
你可以使用这个正则表达式:
^\d(\.\d{0,4})?$

正则表达式演示

(\.\d{0,4})? 使小数点后的部分变为可选,以允许单个数字作为有效输入。

注意:这也将允许 9. 作为有效输入。


OP提到这将用于用户输入时。如果他将其用作掩码,那么用户将永远无法使用您的正则表达式键入小数,因为它需要后面跟随一个数字。您可能需要允许0到4。 - Brian Stephens
1
将其设置为\d{0,4}将验证甚至是9.,不确定OP是否想要这样。 - anubhava
1
当用户输入 9.4 时,需要验证每个增量步骤:99.9.4 - Brian Stephens

3
/^\d(\.\d{0,4})?$/

正则表达式分解

/ - 表示一个正则表达式的开始

^\d - 表达式以数字开头

\. - 需要转义句点,否则会匹配任何字符。

\d{0,4} - 匹配0到4个数字。

() - 捕获括号内的所有内容

? - 匹配0或1次表达式


1
这种情况下,仅为单个数字时无法正常工作。这应该可以解决:/^\d(\.\d{0,4})?$/ - GriffinG
1
抱歉,我忘记在括号中捕获一个组。谢谢指出。 - Richard Hamilton
答案已经给你了,因为你把它全部分解了。 - Cody Harness

1

你可以通过使用^(\d|\d\.\d{1,4})$来改进你的正则表达式,以避免重复锚点,并且如果你不想捕获内容,你可以使用^(?: - Federico Piazza
请注意,替代方案比可选组的工作速度慢。 - Wiktor Stribiżew

1
在您的示例中,您还允许没有小数点,因此您需要: ^\d(\.\d{0,4})?$

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