简单正则expression式,精度为2的小数

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

有效的例子

123.12 2 56754 92929292929292.12 0.21 3.1 

无效的例子:

 12.1232 2.23332 e666.76 

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

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

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

最紧凑的:

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

两者都假设你必须在小数点前后至less有一位数字。

为了要求整个string是这种forms的数字,将expression式包装在起始和结束标签中,例如(以Perl的forms):

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

ADDED:包装()中的小数部分? 使其成为可选。 请注意,这不包括“12.”等forms。 包括那更像^\d+\.?\d{0,2}$

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

由于正则expression式是可怕的阅读,更不用说理解,这里是冗长的等值:

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

在大多数正则expression式实现(包括PCRE ,最常见的)中,您可以用\dreplace[0-9] 。 我把它[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 

要包括一个可选的减号和禁止数字如015 (可以被误认为八进制数字)写:

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

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

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

或者,不限于2的精度:

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

后者匹配
1
100
100。
100.74
100.7
0.7
0.7
0.72

它不匹配空string(如\ d *。?\ d * would)

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

会让事情像12.接受。 这不是普遍接受的,但如果你需要“灵活”,那是一条路。 当然[0-9]可以用\dreplace,但是我想这样可以更加可读。

尝试这个

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

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

我用这个最多两位小数:
(^(\+|\-)(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

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

一般来说,即无限制小数位:

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

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

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

我尝试了一个与我的项目。 这允许数字+ | – 标志以及。

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

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

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

这与我工作:

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

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

Chrome 56不接受这种模式(Chrome 56正在使用11.11。一个附加的),并且使用types作为文本进度。

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

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

谢谢… :)