【问题标题】:Regular expression for int and float both not working fineint 和 float 的正则表达式都不能正常工作
【发布时间】:2012-10-18 12:43:21
【问题描述】:

我需要允许用户在文本框中只输入整数 (33) 和浮点数 (33.343)。

下面是我的正则表达式查询,但它不能正常工作。它允许用户输入浮点值,但在 int 值上给出错误。但我也需要允许用户输入 int。当用户输入任何其他类型的值时,它工作正常并给出错误消息。

/^[0-9]*[.][0-9]*$/

【问题讨论】:

    标签: javascript regex string


    【解决方案1】:

    将点及其后的部分设为可选:

    "^\d+(?:\.\d+|)$"
    

    也更喜欢\d 而不是[0-9],不要使用*,因为那时你允许. 两边都没有数字的可能性

    这将接受:

    1
    1.23
    

    但不是:

    .1
    23.
    

    是否需要这种行为取决于您。

    【讨论】:

    • 我没有否决你,但你创建了一个不必要的组。我想你的意思是:"^\d+(?:\.\d+)?$"
    • 不会匹配 .123123. - 两者都是有效的数字/格式
    • 不在我的编译器中:warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data
    • @Ωmega,我认为这真的取决于情况是否应该被认为是有效的。
    • @Ωmega,很公平,但真正的问题是 Asp_Newbie 是否希望这些被视为有效的用户输入。
    【解决方案2】:

    尝试:

    /^[0-9]+(?:\.[0-9]+)?$/
    

    【讨论】:

    • @Florent - 您向谁发表上述评论?
    • @dan1111 - 此解决方案与.123123. 等有效数字不匹配
    • @Ωmega 我认为这取决于情况。
    • 我知道它可以与 parseInt 一起使用,但我虽然 OP 想要有效的整数并以 visual 方式浮动。
    【解决方案3】:

    使用正则表达式

    ^(?=.*\d)\d*(?:\.\d*)?$
    

    这将匹配例如:

    1234
    123.
    1.23
    12.3
    0.12
    .123
    

    【讨论】:

    • +1 用于使用 \d,但我建议:"^\d*\.?\d+$" 以防止没有值的点,例如 "33.",或允许正/负值:"[+\-]?^\d*\.?\d+$"
    • @Blazes - 但是33. 是一个有效的数字/格式,所以...?最好保持允许:)
    • 你应该使用+而不是*
    • 查看了一些 BNF 定义,而且还不错——“33”。是一个有效的整数。
    • 我的 C++ 编译器不将 1. 视为 int,它会发出警告说它必须将 double 转换为 int 并丢失精度。所以这真的取决于你认为什么是有效的。
    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2016-05-09
    相关资源
    最近更新 更多