正则表达式 - 十进制数中的可选点

fra*_*al5 2 regex

我已经编写了两个允许以下格式的正则表达式:

  • X
  • X。
  • XY

其中 Y 可以是 1 或 2 位数字。而 X 是无限的。

正则表达式1: ^\d+(?:\.{0,1})(?:\d{1,2})?$

正则表达式2: ^\d+\.{0,1}(?:\d{1,2})?$

这个比那个好吗?

有没有更好的方法来写这个?

另外,为什么这个在点设置为可选的情况下不起作用: ^\d+(?:\.)(?:\d{1,2})?$

谢谢。

anu*_*ava 5

有没有更好的方法来写这个?

您可以在没有任何组的情况下使用此正则表达式:

^\d+\.?\d{0,2}$
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

\d{0,2}允许在句点后没有任何数字。另请注意,\.{0,1}\.?


Mar*_*ger 5

究其原因^\d+(?:\.)(?:\d{1,2})?$不工作是,它并没有做。可选的,如你所说。该(?:...)是不是你如何使一些可选的; 它的主要用途是将多个事物组合在一起(以便后续的?、'+' 等可以修改该组)而不产生捕获值。

通过在后面加上?. 所以:

^\d+\.?(?:\d{1,2})?$
Run Code Online (Sandbox Code Playgroud)

应该管用。与您显示的其他选项中的任何一个相比,它更简单 - 所以我更可取。更简单:

^\d+\.?\d{0,2}$
Run Code Online (Sandbox Code Playgroud)

应该没问题。