我想编写一个允许整数的正则表达式,或者一个包含0 - 2位十进制数的十进制数。
有效输入
1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11
输入无效
a
a.
1.a
1.111
1.1111
这是我提出的正则表达式
\d*\.?([\d]){0,2}
我无法对其进行测试以确保其正常运行。我发现了几种测试方法。使用我used w3schools setup here的test
方法。另一种方法是使用一些javascript正则表达式测试程序,如regexr和regex101。对于所有这些:似乎我的正则表达式返回误报,或者我的正则表达式不能按预期工作。
问题:什么正则表达式会做我想做的事情?
答案 0 :(得分:4)
^...$
+
而不是*
)。检查此示例:
r = /^\d+\.?\d{0,2}$/
tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111']
tests.forEach(function(val) {
console.log(val, val.match(r) ? ': valid' : ': invalid');
});
在评论之后 - 如果你需要一个解决方案“整数,或十进制数字的0到2位数”(就像你在问题中说的那样,但不就像有效输入部分),您可以使用:
r = /^\d+(\.\d\d{0,1})?$/
console.log('1.'.match(r))
tests = ['1', '1.', '1.1', '1.11', '111111111', '111111111.', '111111111.1', '111111111.11', 'a', 'a.', '1.a', '1.111', '1.1111']
tests.forEach(function(val) {
console.log(val, val.match(r) ? ': valid' : ': invalid');
});
答案 1 :(得分:0)
不要忘记关闭和打开正则表达式,许多新的正则表达式得到它,他们最终不需要的结果,一切都应该在^和$之间,^是单词(数字)边界的起点,$是结束点。 ..像下面这样的东西可以帮助你,尝试:
'use strict';
var decimal = /^\d+(\.\d\d{0,2})$/, num = 111111111.11;
console.log(decimal.test(num));
希望这会有所帮助......