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

Javascript 如果字符串包含带数字的整数/小数,则要匹配正则表达式,javascript,jquery,Javascript,Jquery,我想写一个正则表达式,它允许一个整数,或者一个小数位数为0-2的十进制数 有效输入 1 1. 1.1 1.11 111111111 111111111. 111111111.1 111111111.11 a a. 1.a 1.111 1.1111 无效输入 1 1. 1.1 1.11 111111111 111111111. 111111111.1 111111111.11 a a. 1.a 1.111 1.1111 字符串允许任意数量的数字字符,但仅允许1个十进制/句点 如果存在句点

我想写一个正则表达式,它允许一个整数,或者一个小数位数为0-2的十进制数

有效输入

1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11
a
a.
1.a
1.111
1.1111
无效输入

1
1.
1.1
1.11
111111111
111111111.
111111111.1
111111111.11
a
a.
1.a
1.111
1.1111
  • 字符串允许任意数量的数字字符,但仅允许1个十进制/句点
  • 如果存在句点/小数点:小数点后仅允许2位字符
这是我想出的正则表达式

\d*\.?([\d]){0,2}
我在测试它以确保它工作时遇到困难。我找到了几种测试方法。使用我刚才提到的
测试方法。另一种方法是使用一些javascript正则表达式测试器,如和。对于所有这些:要么我的正则表达式返回了误报,要么我的正则表达式没有按预期工作

问题:什么正则表达式会做我希望它做的事情

  • 您需要确保使用
    ^…$
  • 第一个数字应至少出现一次(因此您希望使用
    +
    ,而不是
    *
  • 检查此示例:

    r=/^\d+\.?\d{0,2}$/
    测试=['1','1.1','1.11','111111111','111111111','111111111.1','111111111.11','a','a','1.a','1.111','1.1111']
    测试。forEach(功能(val){
    console.log(val,val.match(r)?':valid':':invalid');
    });
    
  • 您需要确保使用
    ^…$
  • 第一个数字应至少出现一次(因此您希望使用
    +
    ,而不是
    *
  • 检查此示例:

    r=/^\d+\.?\d{0,2}$/
    测试=['1','1.1','1.11','111111111','111111111','111111111.1','111111111.11','a','a','1.a','1.111','1.1111']
    测试。forEach(功能(val){
    console.log(val,val.match(r)?':valid':':invalid');
    
    });不要忘记在正则表达式中关闭和打开,许多新的正则表达式用于获取它,它们最终会产生不想要的结果,所有内容都应该在^和$之间,^是单词(数字)边界的起点,$是终点…下面的内容应该可以帮助您,请尝试:

    'use strict';
    var decimal = /^\d+(\.\d\d{0,2})$/, num = 111111111.11;
    console.log(decimal.test(num));
    

    希望这有帮助…

    不要忘记在正则表达式中关闭和打开,许多新的正则表达式用于获取它,结果都是不想要的结果,所有内容都应该在^和$之间,^是单词(数字)边界的起点,$是终点…下面的内容应该可以帮助您,请尝试:

    'use strict';
    var decimal = /^\d+(\.\d\d{0,2})$/, num = 111111111.11;
    console.log(decimal.test(num));
    

    希望这有助于…

    正则表达式应该是好的,尽管您可能希望将行的开始/结束规则包括到:
    ^\d*\?([\d]){0,2}$
    正则表达式应该是好的,尽管您可能希望将行的开始/结束规则包括到:
    ^\d*\?([\d]){0,2}$
    @RoryMcCrossan,我想它应该是一个
    +
    ,而不是
    *
    ,在第一次
    \d
    。我已经删除了我的答案,并对你的答案投了赞成票,你赢了我:)@DonCallisto,
    12有什么问题。
    ?OP说这是一个有效的输入。。。(如果它无效,我将更改正则表达式以将其设置为无效…@Dekel,他在哪里说的?@Neil,W3不会保存你的代码。您可以将jsfiddle.net用于that@RoryMcCrossan,我想应该是
    +
    而不是
    *
    第一次
    \d
    。我已经删除了我的答案,并对你的答案投了更高的票,你比我快:)@DonCallisto,
    12有什么问题吗?OP说这是一个有效的输入。。。(如果它无效,我将更改正则表达式以将其设置为无效…@Dekel,他在哪里说的?@Neil,W3不会保存你的代码。您可以使用jsfiddle.net来实现这一点