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

有效示例:

123.12
2
56754
92929292929292.12
0.21
3.1


无效的示例:

12.1232
2.23332
e666.76


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

评论

相关:有关带千位分隔符的小数,请参见stackoverflow.com/questions/16148034/…

最佳答案在这里:stackoverflow.com/a/39399503/715269

#1 楼

有效的正则表达式令牌因实现而异。通用形式为:

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


更紧凑:

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


两者都假定两者至少具有一个

要要求整个字符串是这种格式的数字,请将表达式包装在开始和结束标记中,例如(以Perl格式):

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


要匹配不带小数点前的前导数字(.12)的数字和带尾部的整数(12.),同时排除单个句点(.)的输入,请尝试以下方法:

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



已添加

()?的小数部分包装为可选。请注意,这不包括诸如12.之类的形式,包括与^\d+\.?\d{0,2}$之类的形式。

已添加

使用^\d{1,6}(\.\d{1,2})?$可以停止重复并限制整个十进制值的一部分。

评论


从数学上讲,我认为精度2的数字应始终具有两个小数,即使最后一个为零。这是基于我对大量数字的经验,因此可能是错误的,但是您实际上并不知道1.7是1.70还是1.70至1.74之间的任何数字。

– paxdiablo
08年11月21日在9:17

谢谢!正是我所需要的:) +1

– alex
09年8月27日在0:09

这匹配0001.00:/

– redben
2012年1月21日15:40

添加 '-?'在此^ \ d +(\。\ d {1,2})?$ ===> ^-?\ d +(\。\ d {1,2})?$中用于支持-ve

– Murali Murugesan
13年2月6日在10:00

@BimalDas,您可以通过在表达式前面加上-?来支持负数。 ,例如-?\ d +(\。\ d {1,2})?。我没有添加负数或以小数点开头,因为它们在OP的问题中没有,尽管它们对于更通用的数字格式肯定有效。这里的注释线程提供了几种处理“ .21”的方法。

– DocMax
17年7月21日在16:06

#2 楼

^[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]替换为在大多数正则表达式实现中(包括最常见的PCRE)。我将其保留为\d,因为我认为它更易于阅读。

此外,这是我用来检查它的简单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


评论


我希望小数点前最多3位数字,这样就没有运气^([0-9] {0,3})+(\。[0-9] {1,2})?$

–腊肠
13-10-15在6:17

@Raghurocks在第一个结束括号^([0-9] {0,3})(\。[0-9] {1,2})?$之后删除+。

– dbr
13-10-17在12:55

对于Java用户:小数点不能转义。

–user1382306
2014年1月26日22:10

@Gracchus确定吗?它可能应该是\\。代替 \。因为。将看起来像它的作品,但匹配任何字符(不仅是小数位)。例如,如果您不逃避1z23和1.23可能都被视为有效

– dbr
2014年1月27日在2:27



@dbr也许就是这样。 Java只是抱怨转义不当。删除“修复”(关闭),大声笑。我还没有机会对其进行全面测试。

–user1382306
2014年1月27日,下午2:31

#3 楼

要包括可选的减号并禁止使用015之类的数字(可能会误认为八进制数字),请输入:

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


评论


这允许我在小数点前使用alpha。允许X.25

–孟加拉虎
15年3月25日在18:05

这不会将小数位数限制为2。

–达伍德·伊本·卡里姆(Dawood ibn Kareem)
16-10-17在19:32

#4 楼

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

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


,或者,不限于精度2:

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


后一种匹配项
1
100
100.
100.74
100.7
0.7
.7
.72

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

#5 楼

我最多使用一个小数点后两位:(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
通过:
.25
10.25
+0.25
不通过:
-.25
01.25
1.
1.256

评论


这还将传递一个空白值。

–孟加拉虎
2015年2月25日在23:07

#6 楼

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


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

#7 楼

试试这个

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


它也将允许正号和负号。

#8 楼

主要答案是错误的,因为它可以验证5.5,输入

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

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


结果如下:


true =>“ 0” / true =>“ 0.00” / true =>“ 0.0” / true =>“ 0,00” / true => “ 0,0” / true =>“ 1,2”
true =>“ 1.1” / true =>“ 1” / true =>“ 100” true =>“ 100.00” / true =>“ 100.0 “ / true =>
” 1.11“ / true =>” 1,11“ / false =>” -5“ / false =>” -0.00“ / true =>” 101“ / false =>
“ 0.00.0” / true =>“ 0.000” / true =>“ 000.25” / false =>“ .25” / true =>“ 100.01” /
true =>“ 100.2” / true = >“ 00” / false =>“ 5”。 / false =>“ 6,” / true =>“ 82” / true =>
“ 81,3” / true =>“ 7” / true =>“ 7.654”


#9 楼

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


#10 楼

通常,即无限制的小数位数:

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

评论


例如,与22.00不匹配

– Fusseldieb
11月6日13:48



#11 楼

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

使用

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


评论


不,那将超出项目范围!谢谢,但是,它很方便:)

–user39221
08年11月21日在7:38

#12 楼

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

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


alert(getInteger('-11.11'));


#13 楼

这对我有用:

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


组1是您的浮点数,组2仅是小数。

#14 楼

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

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


#15 楼

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



#16 楼

这将允许带幂运算的小数和最多2位数字,

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


演示

评论


不匹配整数也不匹配1.2e-10

–多多
'18 Sep 4'在10:10

是的,谢谢您的纠正。我以为只有十进制数字

– Nambi_0915
18/09/4在10:19



([0-9] +)?最好写为\ d *。现在,它与10e3不匹配。 OP希望匹配最多2位数字。

–多多
'18 Sep 4'在10:25

#17 楼

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


函数将验证任何十进制数字天气数字是否具有小数位,否则将显示“正确数字”,否则将显示“请仅在数字文本框中输入数字”。警报消息将会出现。

谢谢... :)