我在正则表达式中很可怕......并且需要一个在十进制之前和之后限制的正则表达式。
两个两个例子:
例如...
我需要这个用于KEYPRESS事件......所以它必须允许句点
而且......不幸的是......我无法使用第三方屏蔽工具。
所以...
前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}\.)$
(不允许自己使用.
。)
^(?:\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)
}
})