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

时间:2018-03-05 15:27:07

标签: javascript regex

我对正则表达式很恐怖......并且需要一个在小数点前后限制的正则表达式。

两个两个例子:

例如......

  • 22.22 ..应该是好的
  • 22 ..应该是好的
  • .22 ..应该很好
  • .2 ..应该是好的

  • 222 ..应该失败

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

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

因此...

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

2 个答案:

答案 0 :(得分: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}\.)$(不允许自己.。)

答案 1 :(得分: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)
  }
})