最大长度忽略点的十进制数的正则表达式

Ric*_*cky 0 regex regex-lookarounds

我正在使用一个正则表达式,它允许一个数字是带小数位的最大长度。

它应该允许最多 16 个数字和 3 个小数位,但是最多 16 个数字应该包括小数但不包括 . 特点。我试图和这个至今:^(?=^[\d\.].{0,16}$)[0-9]+(\.[0-9]{1,3})?$,这是接近但它允许17个单号,当它应该只接受16.如果我改变{0,16}{0,15}它,然后打破了小数。

接受的值:

  • 123
  • 123.3
  • 123.45
  • 123.456
  • 1111111111111.345(共16个号码)
  • 11111111111111.45(共16个号码)

拒绝了:

  • 123.1234
  • 11111111111111111(17个字符)
  • 1111111111111111。
  • 111111111111111.56(15 个字符和 2 个数字 = 17)

提前致谢。

anu*_*ava 5

你的正则表达式非常接近,你可以使用这个正则表达式:

^(?=(?:\d\.?){0,16}$)\d+(?:\.\d{1,3})?$
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详情:

  • (?=(?:\d\.?){0,16}$): 是积极的前瞻来断言我们在输入中有 0 到 16 位数字,其中点是可选的。
  • \d+(?:\.\d{1,3})?: 匹配1到3位的整数或十进制数。

  • 哦,`(?:\d\.?){0,16}`,太聪明了!我正在努力处理计数中的“可选点”,你的方法更好:) (2认同)