【问题标题】:Regular expression to enforce 2 digits after decimal point正则表达式强制小数点后两位数
【发布时间】:2012-11-03 10:39:25
【问题描述】:

我需要使用 JavaScript 验证数字字符串,以确保该数字恰好有两位小数。

只有当

  1. 数字正好有两位小数
  2. 小数点前至少有一位数字。 (可能为零)
  3. 小数点前的数字不能以多个零开头。

有效数字:

0.01
0.12
111.23
1234.56
012345.67
123.00
0.00

无效数字:

.12
1.1
0.0
00.00
1234.
1234.567
1234
00123.45
abcd.12
12a4.56
1234.5A

我试过正则表达式[0-9][\.][0-9][0-9]$,但它允许小数点前的字母,如12a4.56

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    . 匹配任何字符,它不会按照您的想法执行。你必须逃避它。此外,您还有两个错误;试试

    ^[0-9]+\.[0-9][0-9]$
    

    改为使用\d 作为十进制数字,甚至更好:

    ^\d+\.\d\d$
    

    【讨论】:

    • 您好 H2C03,您的表达式正在接受不应传递的 .12、.34 等。
    • @ManasSaha 啊,所以小数点前至少需要一个数字。你来了。
    • 包含点的字符类匹配文字点,而不是任何字符。真正的问题是,OP 没有强制数字在开始后立即跟随,即没有^,他也不允许小数点前有多个数字。 [.] 非常好。
    • @phant0m 你是对的,但我只是猜到了点的使用位置,因为 OP 没有提供他尝试过的代码。此外,我的正则表达式解决了您列出的两个问题(我也注意到了)。但是,如果您认为这是一个错误的答案,请随时投反对票。
    • 他提供了正则表达式:[0-9][.][0-9][0-9]$ ;) 另外,您可以使用 \d 而不是 [0-9]
    【解决方案2】:

    This covers all requirements:

    ^(0|0?[1-9]\d*)\.\d\d$
    
    • 数字正好有两位小数
      • 由于非可选的\.\d\d$ 非常满意

    其他两个条件可以重述如下:

    • 小数点前的数字是零
    • 或正好有一个零的数字,然后是一个以零开头的数字

    这在这两种情况下都有涉及:

    • 0
    • 0?[1-9]\d*

    【讨论】:

      【解决方案3】:

      你不需要正则表达式。

      JavaScript 有一个函数 toFixed() 可以满足您的需要。

      var fixedtotwodecimals = floatvalue.toFixed(2);
      

      【讨论】:

      • 我相信 OP 想要验证用户输入(即布尔值),如果它无效则不更正/修复它。
      • 是的...所以将原始值与 toFixed 值进行比较。你仍然不需要正则表达式。
      【解决方案4】:

      我用过这个

      ^[1-9][1-9]*[.]?[1-9]{0,2}$

      • 0 不接受

      • 123.12 接受但 123.123 不接受

      • 1 接受

      • 12213123 接受

      • sdfsf 不接受

      • 15.12 接受

      • 15@12 不接受

      • 15&12 不接受

      【讨论】:

        【解决方案5】:
        var values='0.12';
        
        document.write(values.match(/\d+[.]+\d+\d/));
        

        根据需要更改值并检查它

        【讨论】:

          【解决方案6】:

          这里是:

          ^(0[.]+\d{2})|^[1-9]\d+[.]+\d{2}$
          

          【讨论】:

          • 这是错误的,例如匹配0.110.11。你缺少括号,| 后面的^ 是错误的[.]+ 不应该有+
          【解决方案7】:

          试试这个代码

          pattern="[0-9]*(\.?[0-9]{1,2}$)?"
          
          • 1 有效

          • 1.1 有效

          • 1.12 有效

          • 1.123 无效

          • 只有数字有效

            pattern="[0-9]*(.?[0-9]{2}$)?"

          • 1 有效

          • 1.1 无效

          • 1.12 有效

          • 1.123 无效

          • 只有数字有效

          【讨论】:

            猜你喜欢
            • 2018-07-16
            • 2015-01-02
            • 1970-01-01
            • 1970-01-01
            • 2015-04-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多