Regex 带0、1或2位小数的正十进制数的正则表达式

Regex 带0、1或2位小数的正十进制数的正则表达式,regex,Regex,请帮我做一个带0、1或2位小数的正小数的正则表达式。它必须允许逗号和点。 例如,它必须允许: 0,01 0.01 0,1 1 1.1 1,11 但不允许: -1 0.0 0,00 .01 0 1,111 1.111 我有这个 /(^\d*(?:\.\124;\,)?\ d*[1-9]+\d*$)。(^[1-9]+\d*(?:\.\124;\,)\ d*)/ 但我找不到如何禁止小数点后两位以上 更新 男人们,我必须拒绝0.0、0等等。你可以使用括号概念来限制位数: \d{0,2}表示从最小值0

请帮我做一个带0、1或2位小数的正小数的正则表达式。它必须允许逗号和点。 例如,它必须允许:

0,01
0.01
0,1
1
1.1
1,11
但不允许:

-1
0.0
0,00
.01
0
1,111
1.111
我有这个
/(^\d*(?:\.\124;\,)?\ d*[1-9]+\d*$)。(^[1-9]+\d*(?:\.\124;\,)\ d*)/
但我找不到如何禁止小数点后两位以上

更新
男人们,我必须拒绝0.0、0等等。

你可以使用括号概念来限制位数:


\d{0,2}表示从最小值0到最大值2的任何数字运行。您可以使用括号概念来限制位数:


\d{0,2}意味着从最小值0到最大值2的任何数字运行。编辑2:现在不允许精确的0,0.0等。

^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$
这与小数点前至少一位匹配,后跟可选的小数点,后跟0-2位

负前瞻查找绝对零的任何味道并阻止匹配。

^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$
这是原始正则表达式,因此您需要根据您的语言对其进行适当的转义。(例如,在某些语言中,您需要将
\
斜杠加倍为
\

/^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$/

编辑2:现在完全不允许0,0.0等。

^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$
这与小数点前至少一位匹配,后跟可选的小数点,后跟0-2位

负前瞻查找绝对零的任何味道并阻止匹配。

^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$
这是原始正则表达式,因此您需要根据您的语言对其进行适当的转义(例如,在某些语言中,您需要将
\
斜杠加倍为
\

/^(?!0*[.,]0*$|[.,]0*$|0*$)\d+[,.]?\d{0,2}$/

到目前为止,你所得到的对我来说似乎不必要的复杂。就这样吧

/^\d+([.,]\d{0,2})?$/
这对于OP中的每个测试用例都是正确的,除了:

0.0
0,00
0

我不明白你为什么要拒绝这些。

到目前为止,你所得到的对我来说似乎不必要的复杂。就这样吧

/^\d+([.,]\d{0,2})?$/
/^\d+([.,]\d{1,2})?$/
这对于OP中的每个测试用例都是正确的,除了:

0.0
0,00
0
我不明白你为什么要拒绝这些

/^\d+([.,]\d{1,2})?$/
这将正确地禁止这些“未格式化”数字
.01
3.

如果我们有零位小数,我们可能也不需要小数分隔符

这将正确地禁止这些“未格式化”数字
.01
3.


如果小数位数为零,我们可能也不需要小数分隔符。

这将满足您的需要

我添加了空格、注释和括号来澄清:

(                   #
  ( 0*[1-9]\d*   )  # a non-zero integer portion, followed by
  ( [\.,]\d{1,2} )? # an optional fraction of 1 or 2 decimal digits
)                   # 
|                   # OR
(                   #
  ( 0+ )            # a zero integer portion, followed by
  (                 # an mandatory non-zero 1-2 digit fraction, consisting of
    [\.,]           # a decimal point
    (               # followed by 
      ( 0[1-9]   )  # a 0 followed by a 1-9,
      |             # OR
      ( [1-9]\d? )  # a 1-9 followed by an optional decimal digit
  )
)

正则表达式是次优的,当它在整数部分的零后面找不到非零数字时,0000000000.01之类的东西将回溯,但它应该可以工作。

这将满足您的需要

我添加了空格、注释和括号来澄清:

(                   #
  ( 0*[1-9]\d*   )  # a non-zero integer portion, followed by
  ( [\.,]\d{1,2} )? # an optional fraction of 1 or 2 decimal digits
)                   # 
|                   # OR
(                   #
  ( 0+ )            # a zero integer portion, followed by
  (                 # an mandatory non-zero 1-2 digit fraction, consisting of
    [\.,]           # a decimal point
    (               # followed by 
      ( 0[1-9]   )  # a 0 followed by a 1-9,
      |             # OR
      ( [1-9]\d? )  # a 1-9 followed by an optional decimal digit
  )
)

正则表达式是次优的,比如0000000000.01,当它在整数部分的零后面找不到一个非零数字时,它会回溯,但它应该可以工作。

我将在jQuery自定义验证方法中使用它,javascript也是如此。我将在jQuery自定义验证方法中使用它,javascript也是如此。就其本身而言,e> \d{0,2}错误地匹配字符串
0.123456
中的
12
(它也匹配
34
56
)本身,
\d{0,2}
错误地匹配字符串
0.123456
中的
12
(它还匹配
34
56
)谢谢你!它比其他的更接近,但它仍然允许0。我能让它像这样拒绝“00”,“000”等等吗?这个正则表达式非常可靠。谢谢你!谢谢你!它比其他的更接近,但它仍然允许0。我能让它像这样拒绝“00”,“000”吗等等?这个正则表达式非常可靠。谢谢你!我刚刚意识到我上面的正则表达式将接受0 w/o一个分数。修复了!我刚刚意识到我上面的正则表达式将接受0 w/o一个分数。修复了!这就是这里的问题,它不应该允许这些
0
0,0
etcExactly,这就是这里的问题,它不应该允许这些
 0
0,0