我对正则表达式很恐怖......并且需要一个在小数点前后限制的正则表达式。
两个两个例子:
例如......
.2 ..应该是好的
222 ..应该失败
我需要这个用于KEYPRESS事件......所以它必须允许句号
而且......不幸的是......我无法使用第三方屏蔽工具。
因此...
前2个必须是数字
第三个CAN是一个时期
最后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)
^(?:\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)
}
})