精度为2的十进制的简单正则表达式

时间:2008-11-21 07:29:43

标签: regex

精度为2的小数的正则表达式是什么?

有效示例

123.12
2
56754
92929292929292.12
0.21
3.1

示例无效:

12.1232
2.23332
e666.76

小数点可以是可选的,也可以包含整数。

17 个答案:

答案 0 :(得分:370)

有效的正则表达式令牌因实现而异。我所知道的最通用的形式是:

[0-9]+(\.[0-9][0-9]?)?

最紧凑:

\d+(\.\d{1,2})?

两者都假设您必须在小数位之前和小数位之前至少有一位数。

要求整个字符串是此表单的数字,请将表达式包装在start和end标记中,例如(以Perl的形式):

^\d+(\.\d{1,2})?$

已添加:在()中包含小数部分?使它成为可选的。请注意,这不包括“12”等形式。包括那将更像^\d+\.?\d{0,2}$

<强>加了: 使用此格式^\d{1,6}(\.\d{1,2})?$可以停止重复,并对小数值的整个部分进行限制。

答案 1 :(得分:250)

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

由于正则表达式读起来很糟糕,更不用说了解,这里是详细的等价物:

^                         # Start of string
 [0-9]+                   # Require one or more numbers
       (                  # Begin optional group
        \.                # Point must be escaped or it is treated as "any character"
          [0-9]{1,2}      # One or two numbers
                    )?    # End group--signify that it's optional with "?"
                      $   # End of string

在大多数正则表达式实现中,您可以将[0-9]替换为\d(包括最常见的PCRE)。我把它保留为[0-9]因为我觉得它更容易阅读。

此外,这是我用来检查它的简单Python脚本:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

答案 2 :(得分:19)

要包含可选的减号并禁止015之类的数字(可能被误认为是八进制数字),请写:

-?(0|([1-9]\d*))(\.\d+)?

答案 3 :(得分:13)

对于没有千位分隔符的数字,我喜欢这个简单,紧凑的正则表达式:

\d+(\.\d{2})?|\.\d{2}

或者,不限于2的精度:

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

后者匹配
1
100个
100.
100.74
100.7
0.7
0.7
0.72

它与空字符串不匹配(如\ d *。?\ d * will)

答案 4 :(得分:7)

我使用这个最多两位小数:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) 经过:
0.25
0.25
10.25
+0.25

不通过:
-.25
01.25
1.
1.256

答案 5 :(得分:7)

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

会接受12.之类的内容。这不是普遍接受的,但如果你需要“灵活”,这是一种可行的方法。当然[0-9]可以替换为\d,但我想这样更具可读性。

答案 6 :(得分:5)

试试这个

 (\\+|-)?([0-9]+(\\.[0-9]+))

它也会允许正面和负面的迹象。

答案 7 :(得分:3)

主要答案是错误的,因为它有效5.5,输入

此代码处理它(但在我的示例中禁止使用负数):

/^[0-9]+([.,][0-9]{1,2})?$/;

结果如下:

  

true =&gt; &#34; 0&#34; / true =&gt; &#34; 0.00&#34; / true =&gt; &#34; 0.0&#34; / true =&gt; &#34; 0,00&#34; / true =&gt; &#34; 0,0&#34; / true =&gt; &#34; 1,2&#34;   true =&gt; &#34; 1.1&#34; / true =&gt; &#34; 1&#34; / true =&gt; &#34; 100&#34; true =&gt; &#34; 100.00&#34; / true =&gt; &#34; 100.0&#34; / true =&gt;   &#34; 1.11&#34; / true =&gt; &#34; 1,11&#34; / false =&gt; &#34; -5&#34; / false =&gt; &#34; -0.00&#34; / true =&gt; &#34; 101&#34; / false =&gt;   &#34; 0.00.0&#34; / true =&gt; &#34; 0.000&#34; / true =&gt; &#34; 000.25&#34; / false =&gt; &#34; 0.25&#34; / true =&gt; &#34; 100.01&#34; /   true =&gt; &#34; 100.2&#34; / true =&gt; &#34; 00&#34; / false =&gt; &#34; 5&#34。 / false =&gt; &#34; 6&#34; / true =&gt; &#34; 82&#34; / true =&gt;   &#34; 81,3&#34; / true =&gt; &#34; 7&#34; / true =&gt; &#34; 7.654&#34;

答案 8 :(得分:2)

preg_match("/^-?\d+[\.]?\d\d$/", $sum)

答案 9 :(得分:2)

一般情况下,即无限小数位:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$

答案 10 :(得分:1)

您是否需要考虑e中的e666.76

使用

(e|0-9)\d*\d.\d{1,2)

答案 11 :(得分:1)

这对我有用:

(-?[0-9]+(\.[0-9]+)?)

第1组是您的浮动数,而第2组是仅限部分。

答案 12 :(得分:1)

添加我的答案,有人可能觉得它很有用,或者也可能是正确的。

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));

答案 13 :(得分:1)

我用我的项目尝试了一个。 这允许带有+ | -符号的数字。

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/

答案 14 :(得分:0)

Chrome 56不接受这种模式(Chrome 56正在接受11.11。附加。),类型编号,使用类型作为文本作为进度。

答案 15 :(得分:0)

这将允许带幂和十进制的两位小数,

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

Demo

答案 16 :(得分:-1)

 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

函数将验证任何十进制数字天气数字是否有小数位,它会说“正确数字”其他明智的“请输入数字到数量文本框”。警报信息会出现。

谢谢...:)