Javascript 整型、整型和x2B的正则表达式;点和小数

Javascript 整型、整型和x2B的正则表达式;点和小数,javascript,regex,Javascript,Regex,我已经搜索了StackOverflow,但我找不到关于如何检查计算器应用程序的数字输入正则表达式的答案,该应用程序将在每个keyup(jquery key up)中检查以下格式: 任意整数,如:34534 当一个点跟在整数后面时,用户将要输入这样的十进制数:34534。请注意,一个点只能输入一次 任何浮动:34534.093485 我不打算用逗号来分隔数千个…但是如果有人也能提供一个正则表达式,我会很高兴的 是否可以只使用一个正则表达式检查上述条件?提前感谢。单独的匹配成功与否?如果是,则使

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

  • 任意整数,如:34534
  • 当一个点跟在整数后面时,用户将要输入这样的十进制数:34534。请注意,一个点只能输入一次
  • 任何浮动:34534.093485
我不打算用逗号来分隔数千个…但是如果有人也能提供一个正则表达式,我会很高兴的


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

单独的
匹配成功与否?如果是,则使用:

\d+(\.\d*)?|\.\d*
\d+(\.\d*)?|\.\d+
如果没有,则使用:

\d+(\.\d*)?|\.\d*
\d+(\.\d*)?|\.\d+
与其将逗号合并到正则表达式中,我建议先去掉它们:
str=str.replace(/,/g',)
。然后对照正则表达式进行检查


这并不能验证数字是否正确地分组为三个一组,但我看不出这种检查有多大价值。如果用户键入
1024
,然后决定添加一个数字(
10246
),您可能不应该强制他们移动逗号。

单独的
匹配是否成功?如果是,则使用:

\d+(\.\d*)?|\.\d*
\d+(\.\d*)?|\.\d+
如果没有,则使用:

\d+(\.\d*)?|\.\d*
\d+(\.\d*)?|\.\d+
与其将逗号合并到正则表达式中,我建议先去掉它们:
str=str.replace(/,/g',)
。然后对照正则表达式进行检查


这并不能验证数字是否正确地分组为三个一组,但我看不出这种检查有多大价值。如果用户键入
1024
,然后决定添加一个数字(
10246
),您可能不应该强迫他们移动逗号。

让我们编写您的规范,并从中发展

  • 任意整数:
    \d+
  • 逗号,可选后跟整数:
    \。\d*
将两者结合起来,使后者成为可选的,您将得到:

\d+\.?\d*

至于逗号的处理,我不想讨论它,因为它很快就会变得很难看。如果您仍然关心输入中的逗号,那么您只需从输入中删除它们。

让我们编写您的规范,并从中发展

  • 任意整数:
    \d+
  • 逗号,可选后跟整数:
    \。\d*
将两者结合起来,使后者成为可选的,您将得到:

\d+\.?\d*
至于逗号的处理,我不想讨论它,因为它很快就会变得很难看。如果您仍然关心逗号,则只需从输入中删除它们。

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

您可以通过以下方式使用:
[/\d+./]
我认为这可以用于您的任何查询。
不管是12445还是1244。或者12445.43

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

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个月后,当你意识到某个地方出了问题,或者你想改变它,做一些稍微不同的事情时,你会很容易看到哪里,还有要解决的问题。

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

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个月后,当你意识到某个地方出了问题,或者你想改变它来做一些稍有不同的事情时,你会更容易看到它的位置,并且更容易修复。

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

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

这确实是可能的。你试过什么?非常适合快速测试正则表达式的想法。正则表达式在这方面效率相当低,这可能会更快。你试过什么?非常适合快速测试正则表达式的想法。正则表达式在这方面效率很低,这可能会更快。问题是,它允许一些无意义的输入,例如
,.
(第一个)或
,.3
(第二个)和
3,4,5
,它们的格式显然不正确。要让正则表达式正确地做到这一点,它会变得非常混乱和容易出错。有时候,关于regex最好知道的是什么时候不使用them@Joe是的,如果OP需要,可以处理更健壮的答案。您需要使用
^
$
来锚定regexp,否则它将允许数字周围包含非数字字符。问题在于(以及这种情况下您将获得的大多数正则表达式模式)它允许无意义的输入,如
,.
(对于第一个)或
,.3
(对于第二个)和
3,4,5
,这些输入显然格式不正确。要让正则表达式正确地做到这一点,它会变得非常混乱和容易出错。有时候,关于regex最好知道的是什么时候不使用them@Joe是的,如果OP需要的话,就可以编写更可靠的答案。您需要使用
^