正则表达式匹配字符串是否包含带有数字的整数/小数

Nei*_*eil 0 javascript jquery

我想编写一个允许整数或具有 0 - 2 个小数位的小数的正则表达式。

有效输入

1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11
Run Code Online (Sandbox Code Playgroud)

输入无效

a
a.
1.a
1.111
1.1111
Run Code Online (Sandbox Code Playgroud)
  • 字符串允许任意数量的数字字符,但只允许 1 个小数点/句点
  • 如果存在句点/小数点:小数点后仅允许 2 位数字字符

这是我想出的正则表达式

\d*\.?([\d]){0,2}
Run Code Online (Sandbox Code Playgroud)

我在测试它以确保它有效时遇到了麻烦。我找到了几种测试它的方法。使用test我刚刚在这里使用 w3schools 设置的方法。另一种方法是使用一些 javascript 正则表达式测试器,例如regexr和regex101。对于所有这些:看来我的正则表达式返回误报,或者我的正则表达式未按预期工作。

问题:什么正则表达式可以做我想做的事?

Dek*_*kel 5

  1. 您需要确保使用以下命令检查完整的字符串(从第一个字符到最后一个字符)^...$
  2. 第一个数字应至少出现 1 次(因此您要使用+and not *)。

检查这个例子:

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');
});
Run Code Online (Sandbox Code Playgroud)

更新

根据评论 - 如果您需要“整数或具有 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');
});
Run Code Online (Sandbox Code Playgroud)

  • @DonCallisto,“12.”有什么问题?OP说这是一个有效的输入...(如果它无效,我会更改正则表达式以将其设置为无效...) (2认同)