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


Answers:


397

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

[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})?$停止重复并给予限制为十进制值的整体的一部分。


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

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

6
这匹配0001.00:/
redben

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

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

276
^[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

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

3
@Raghurocks取下+第一闭合括号后,^([0-9]{0,3})(\.[0-9]{1,2})?$
DBR

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

3
@Gracchus确定吗?可能应该\\.改为,\.因为.它看起来像是可以使用,但可以匹配任何字符(不仅是小数位)。例如,如果您不逃避这两个问题1z231.23可能会被视为有效
dbr 2014年

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


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 *会)


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


这还将传递一个空白值。
BengalTigger 2015年

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

会使事情像12.被接受。这不是普遍接受的,但是如果您需要“灵活”,那是一种方法。当然[0-9]可以用代替\d,但是我想这种方式更具可读性。


5

试试这个

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

它还将允许正面和负面的迹象。


3

主要答案是错误,因为它有效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” /假=>“ -0.00” /真=>“ 101” /假=>“ 0.00.0” /真=>“ 0.000” /真=>“ 000.25” /假=>“ .25” / true =>“ 100.01” / true =>“ 100.2” / true =>“ 00” / false =>“ 5”。/ false =>“ 6,” / true =>“ 82” / true =>“ 81,3” / true =>“



2

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

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


1

你会不会需要采取ee666.76考虑?

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

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

1

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

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


alert(getInteger('-11.11'));


1

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

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

0

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


0

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

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

演示版


那既不匹配整数也不匹配1.2e-10
Toto

是的,谢谢您的纠正。我认为它仅适用于十进制数字
Nambi_0915 '18

([0-9]+)?更好地写\d*。现在不匹配了10e3。OP希望匹配最多2位数字。
多托

-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');
            }
    }

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

谢谢... :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.