十进制之前和之后的正则表达式...包括精度

问题描述 投票:0回答:2

我在正则表达式中很可怕......并且需要一个在十进制之前和之后限制的正则表达式。

两个两个例子:

例如...

  • 22.22 ..应该是好的
  • 22 ..应该是好的
  • .22 ..应该是好的
  • .2 ..应该是好的
  • 222 ..应该失败

我需要这个用于KEYPRESS事件......所以它必须允许句点

而且......不幸的是......我无法使用第三方屏蔽工具。

所以...

前2个必须是数字 第三个可以是一个时期 最后2个是可选的,但必须是数字

javascript regex
2个回答
2
投票

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

说明:

^         start of string
\d        numerical digit (use [0-9] if not supported)
{0,2}     previous (numerical digit) is 0, 1 or 2 in length
(         group (made optional by the trailing ?)
  \.        "decimal place" (dot)
  {1,2}     1 or 2 in length
)?        (end of the group, made optional by the ?)
$         end of string

火柴:

22.22
22
2.22
2.2
22.2
22
.22

更新:OP也要求允许22.。这可以通过使所有“小数点后的数字”可选来实现:

^\d{0,2}(\.\d{0,2})?$(允许.,或......)

^(\d{0,2}(\.\d{1,2})?|\d{1,2}\.)$(不允许自己使用.。)


2
投票

See regex in use here

^(?:\d{1,2}(?:\.\d{0,2})?|\.\d{1,2})$
  • ^在线的开头断言位置
  • (?:\d{1,2}(?:\.\d{0,2})?|\.\d{1,2})匹配以下任一选项 \d{1,2}(?:\.\d{0,2})? \d{1,2}匹配一次或两次数字 (?:\.\d{0,2})?可选择匹配以下内容 \.字面上匹配点.字符 \d{0,2}匹配零到两位数 \.\d{1,2} \.字面上匹配点.字符 \d{1,2}匹配一次或两次数字
  • $在线的末尾断言位置

var r = /^(?:\d{1,2}(?:\.\d{0,2})?|\.\d{1,2})$/
var a = [
  1.11, 1.1, .11, 11., 11, 11.11, //good
  111, 11.111, 111.1, 1111 //bad
]

a.forEach(function(n) {
  if(r.test('' + n)) {
    console.log(n)
  }
})
© www.soinside.com 2019 - 2024. All rights reserved.