正则表达式为整数,整数+点和小数

时间:2012-10-11 22:23:45

标签: javascript regex

我已经搜索了StackOverflow,我找不到如何检查计算器应用程序的数字输入的正则表达式的答案,该计算器应用程序将检查每个键盘的以下格式(jquery键向上):

  • 任何整数,如:34534
  • 当用户即将输入如下所示的十进制数时,当一个点跟随整数时: 34534。请注意,只能输入一次点。
  • 任何浮动:34534.093485

我不打算用逗号分隔成千上万......但如果有人也可以为此提供正则表达式,我会欢迎。

只用一个正则表达式检查上述条件是否可行?提前谢谢。

5 个答案:

答案 0 :(得分:3)

单独.是否成功?如果是,那么使用:

\d+(\.\d*)?|\.\d*

如果没有,请使用:

\d+(\.\d*)?|\.\d+

我建议不要将逗号合并到正则表达式中,而是先将它们删除:str = str.replace(/,/g, '')。然后检查正则表达式。

这不会验证数字是否正确地分组为三个组,但我在这样的检查中看不到多少价值。如果用户键入1,024然后决定添加数字(1,0246),则可能不应强制他们移动逗号。

答案 1 :(得分:1)

让我们写下你的规范,然后从中发展。

  • 任何整数:\d+
  • 逗号,可选后跟一个整数:\.\d*

将两者结合起来并使后者可选,你得到:

\d+\.?\d*

至于处理逗号,我宁愿不进入它,因为它变得非常难看。如果你仍然关心它们,你应该简单地从输入中删除所有逗号。

答案 2 :(得分:0)

你可以这样使用:
[/\d+./] 我认为这可以用于任何查询。 无论是12445还是1244.或12445.43

答案 3 :(得分:0)

我将在这里提出一个可能被低估的答案 - 这是一个更好的解决方案:

function valid_float (num) {
    var num = (num + '').replace(/,/g, ''), // don't care about commas, this turns `num` into a String
        float_num = parseFloat(num);
    return float_num == num || float_num + '.' == num; // allow for the decimal point, deliberately using == to ignore type as `num` is a String now
}

任何能正确完成工作的正则表达式都会在说出“可能”之后带有一个大的星号,如果它没有被发现,它将是一个绝对的调试猪。

当然,这个答案并没有给你带来最酷的单线,这会让你变得“酷!”,但是在6个月的时间里你意识到它在某个地方出了问题,或者你想把它变成做一些稍微不同的事情,看到哪里和修复会更容易。

答案 4 :(得分:0)

我使用 ^(\d)+(.(\d)+)+$ 来捕获每个整数并具有无限长度,只要字符串以整数开头和结尾,并且在每个整数组之间都有点。我正在捕获整数组,以便我可以比较它们。