如果字符串包含带数字的整数/小数,则匹配正则表达式

时间:2016-11-04 13:50:08

标签: javascript jquery

我想编写一个允许整数的正则表达式,或者一个包含0 - 2位十进制数的十进制数。

有效输入

1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11

输入无效

a
a.
1.a
1.111
1.1111
  • string允许任意数量的数字字符,但只允许1个十进制/句点
  • 如果存在句点/小数:只允许小数点后的2位数字

这是我提出的正则表达式

\d*\.?([\d]){0,2}

我无法对其进行测试以确保其正常运行。我发现了几种测试方法。使用我used w3schools setup heretest方法。另一种方法是使用一些javascript正则表达式测试程序,如regexrregex101。对于所有这些:似乎我的正则表达式返回误报,或者我的正则表达式不能按预期工作。

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

2 个答案:

答案 0 :(得分:4)

  1. 您需要确保使用^...$
  2. 检查完整字符串(从第一个字符到最后一个字符)
  3. 第一个数字应该至少出现一次(因此您要使用+而不是*)。
  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));

希望这会有所帮助......