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

Simple regular expression for a decimal with a precision of 2

精度为2的十进制的正则表达式是什么?

有效实例:

1
2
3
4
5
6
123.12
2
56754
92929292929292.12
0.21
3.1

无效实例:

1
2
3
12.1232
2.23332
e666.76

小数点可以是可选的,整数也可以包括在内。


有效的regex令牌因实现而异。我所知道的最一般的形式是:

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

最紧凑的:

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

两者都假定小数点之前和之后都必须有至少一个数字。

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

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

添加:将小数部分包装在()中?使之成为可选的。请注意,这不包括"12"等表格,包括更像^\d+\.?\d{0,2}$

补充:使用此格式^\d{1,6}(\.\d{1,2})?$停止重复,并对十进制值的整个部分进行限制。


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

由于正则表达式很难阅读,更不用说理解,下面是详细的等价物:

1
2
3
4
5
6
7
^                         # 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

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

另外,下面是我用来检查它的简单python脚本:

1
2
3
4
5
6
7
8
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


要包括可选的减号和不允许使用像015这样的数字(可能被误认为是八进制数字),请写:

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


对于没有千位分隔符的数字,我喜欢这个简单、紧凑的regex:

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

或者,不限于2的精度:

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

后者匹配一一百100。一百点七四一百点七零点七772

它不匹配空字符串(如d*)。d*W.)


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

会让像12.这样的事情被接受。这不是普遍接受的,但如果你需要"灵活",这是一种方式。当然,可以用\d替换[0-9],但我想这样更易读。


我用这个数字最多保留两位小数:(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)传球:25零点二五十点二五+ 0.25不通过:- 25一点二五1。一点二五六


试试这个

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

它也允许正负信号。


主回答错误,因为它使5.5,输入有效。

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

1
/^[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"


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

一般来说,即不限小数位数:

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


加上我的答案,有人可能会发现它是有用的,也可能是正确的我的。

1
2
3
4
5
6
7
function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));


这对我很有用:

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

第1组是你的浮点数,第2组只是分数。


你不需要考虑到e666.76中的e吗?

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


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

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

这将允许带求幂的十进制数和最多2位数字,

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

演示


Chrome56不接受这种模式(Chrome56符合11.11)。另一个。)对于类型编号,使用类型作为文本作为进度。


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

函数将验证任何小数点是否有小数点,它会说"正确的数字"否则请只在"数量"文本框中输入数字。"警告消息将出现。

谢谢。。。:)