0

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

  • 任何整数,如:34534
  • 当一个点跟随整数时,当用户要输入一个十进制数时,像这样:34534。注意一个点只能输入一次。
  • 任何浮点数:34534.093485

我不打算使用逗号分隔数千......但如果有人也可以为此提供正则表达式,我会很高兴。

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

4

5 回答 5

3

Is a lone . a successful match or not? If it is then use:

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

If not then use:

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

Rather than incorporating commas into the regexes, I recommend stripping them out first: str = str.replace(/,/g, ''). Then check against the regex.

That wouldn't verify that digits are properly grouped into groups of three, but I don't see much value in such a check. If a user types 1,024 and then decides to add a digit (1,0246), you probably shouldn't force them to move the comma.

于 2012-10-11T22:26:30.957 回答
1

让我们编写您的规范,并以此为基础进行开发。

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

将两者结合起来,使后者成为可选的,你会得到:

\d+\.?\d*

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

于 2012-10-11T22:30:12.593 回答
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 个月的时间里,当你意识到它在某个地方出了问题,或者你想改变它来做一些轻微的事情时不同的是,查看位置和修复将变得容易得多。

于 2012-10-11T22:37:08.590 回答
0

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

于 2012-10-11T22:33:46.150 回答
0

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

于 2021-04-27T17:43:21.617 回答